본문 바로가기
Back_end/JAVA

JAVA - 기본 API(문자열 클래스)

by hyeon1016 2024. 9. 26.

문자열 클래스(String)

 

다양한 문자열의 처리를 제공하는 클래스로, 참조변수와 클래스 두 가지 역할을 수행한다.

 

왜 쓰는가?

-간편하게 문자열을 수정하고 제어하기 위해

 

사용방법

 

1. 객체 생성

String a = new String("STRING CLASS");

 

String 객체를 생성하고 생성자의 파라미터로 문자열을 입력하는 방식이다.

 

 

2. 문자 리터럴 방식

String a = "JAVA";

 

int, float와 비슷한 형식으로 간편하게 작성 가능하다.

 

 

문자열의 메서드

 

concat()

 

문자열을 결합하는 메서드, 하지만 더 간편하고 다른 데이터 타입의 변수도 결합할 수 있는 +연산자를 더 많이 사용한다.

String a = "Ja";
String b = "va";

String c = a.concat(b); ==> "Java"

 

 

charAt()

 

지정한 인덱스에 위치한 문자를 반환하는 메서드

String a = "ABCD";
char b = a.charAt(0); => 'A'

 

 

indexOf()

 

지정한 문자나 문자열의 위치를 인덱스로 알려주는 메서드, 만약 문자열 내에 없다면 -1을 반환한다.

String a ="abcdef"
int b = a.indexOf("a"); ==> 0

 

 

substring()

 

문자열을 잘라낼 때 사용하는 메서드,

단일 파라미터를 사용하면 해당 인덱스부터 끝까지 잘라내고

2개의 파라미터를 사용하면 첫 번째 파라미터에 해당하는 인덱스부터 두 번째 파라미터에 해당하는 인덱스의 전까지 잘라낸다.

 

String a = "01234";

1. 단일 파라미터
a.substring(3); ==> "4"

2. 2개의 파라미터

a.substring(2, 4); ==>"23"

 

 

equals()

 

문자열을 비교하는 데 사용되는 메서드(true/false)로 대소문자를 구분하여 비교한다.

참조형 데이터 타입인 변수는 대입 연산자를 사용할 수 없기 때문에 equals() 메서드로 비교한다. 

String a ="java";
String b ="java";
String c ="JAva";

a.equals(b); ==> true
a.equals(c); ==> false

 

 

split()

 

특정 기호, 공백으로 문자열을 구분하여 배열의 요소로 저장하는 메서드로

저장된 요소는 for문을 사용해 출력 가능하다.

String a = "안녕 하 세 요!";
String[] b = a.split(" "); ==> {"안녕", "하", "세", "요!"}

저장된 요소는 for문으로 출력할 수 있다.

 

 

equalsIgnoerCase()

 

문자열을 대소문자 구분 없이 비교하여 내용일 일치하는지 체크하는 메서드(true/false)

String a = "JaVa";
String b = "jAvA";
Boolean c = a.equalsIgnoreCase(b); ==> true

 

 

join()

 

배열의 요소들 사이사이에 특정 문자를 넣어 하나의 문자열로 만드는 메서드(공백가능)

String[] a = {"A","B","C"};
String b = String.join("#", a); ==> "A#B#C"

 

 

trim()

 

문자열의 앞, 뒤 공백을 제거하는 메서드

String a = "   JAVA    ";
String b = a.trim(); ==> "JAVA"

 

 

valueOf()

 

일반 데이터 타입의 값을 String타입의 문자열로 변환시키는 메서드

int a = 100;
String b = String.valueOf(a); ==> "100"

 

 

format()

 

문자열을 특정 형식으로 포맷하는 데 사용되는 메서드, 사용 방법은 printf()와 동일하다.

 

%d : 정수형
%f : 실수형
%s : 문자열
%n : 줄 바꿈

int a = 10;
float b = 1.5;
String c = "감자";

String d = String.format("%d는 정수, %f는 실수, %s는 문자열이다.", a, b, c);

==> 10은 정수, 1.5는 실수, 감자는 문자열이다.

 

 

length()

 

문자열의 길이를 반환하는 메서드(공백포함)

 

String a = "ABCD EF G";
int b = a.length(); ==> 9

 

 

 

String + String의 문제점

 

String클래스는 불변하는 성질을 가지고 있어, 수정하거나 대입하면 새로운 클래스가 생성된다.

이러한 문제는 불필요한 메모리 사용이 발생할 수 있고, 많은 결합과 수정을 반복할수록 성능이 저하될 수 있다.

String a ="A";
String b ="B";
a=b;

 

변수 a에 b를 대입하면, a의 값은 "B"가 된다.
하지만, 기존의 변수 a의 문자열은 메모리에 계속 남게 된다.

 

이러한 문제를 해결하기 위해 JAVA에서는 StringBuilderStringBuffer 클래스를 제공한다.

 

 

StringBuilder와 StringBuffer

 

Stirng 객체 안의 데이터를 내부적으로 변경할 수 있는 클래스다.
두 클래스 모두 사용하는 방법과 메서드가 동일하다.

두 클래스의 차이점

스레드 : 병렬

 

StringBuffer : 멀티 스레드 작성에 유리함

StringBuilder : 단일 스레드 작성에 유리함

 

메서드 의미
append() 입력된 값을 문자열로 변환하여 대입
reverse() 문자열의 순서를 반대로 나열
insert(ins pos, Object obj) obj의 값을 문자열로 바꿔 pos인 위치에 추가(끼워넣기)
deleteCharAt(int start, int end) start의 위치 부터 end 직전의 위치까지의 문자열을 제거
deleteCharAt(int index) index위치에 있는 문자를 제거

 

'Back_end > JAVA' 카테고리의 다른 글

JAVA - 기본 API(java.util.Random)  (0) 2024.09.27
JAVA - 기본 API(Date, Calendar)  (1) 2024.09.27
JAVA - 내부 클래스  (0) 2024.09.23
JAVA - 예외처리  (0) 2024.09.23
JAVA - 추상 클래스와 인터페이스  (0) 2024.09.22