Back-End/Java

[자바/JAVA] String 클래스

728x90

자바에서 문자열을 다루기 위해 제공하는 String 클래스는 정말 중요하기 때문에 잘 알아두는 게 중요합니다 ㄹㅇ로!

 

Immutable이란?

String 클래스의 가장 큰 특징은 "Immutable" 하다는 것입니다. Immutable은 불변의 라는 의미를 가지고 있습니다.

즉, 한 번 생성된 String 인스턴스는 값을 읽어 올 수만 있고 변경은 할 수 없다는 말과 같습니다.

 

예를 들어 "+" 연산자를 이용해서 문자열을 결합하는 경우 인스턴스 내의 값이 바뀌는 것이 아니라

새로운 값을 가진 String 인스턴스가 만들어지는 것입니다. 

덧셈 연산자를 이용해서 문자열을 결합 시 여러 개의 String 인스턴스가 생성되어 메모리에 올라가기 때문에

결합 횟수는 되도록이면 최소화하는 것이 메모리에 부담이 가지 않아 좋습니다.

 

문자열 생성 방법

문자열 생성 방법은 리터럴 지정 방법과 String 생성자 방법 2가지가 있습니다.

 

1. 리터럴 지정 방법

String str1 = "abc";
String str2 = "abc";

문자열 리터럴은 같은 내용의 문자열이 존재할 때 이미 존재하는 것을 재사용합니다.

위의 코드의 경우 str1과 str2가 같은 주소를 참조합니다.

 

2. 생성자 사용 방법

String str1 = new String("abc");
String str2 = new String("abc");

반면 생성자를 이용한 경우에는 new 연산자에 의해서 메모리 할당이 이루어지기 때문에 항상 새로운 인스턴스가 생성됩니다.

즉, str1과 str2가 각각 다른 메모리 주소를 참조합니다.

 

문자열 비교 방법

equals() 문자열의 값을 비교
== String 인스턴스의 주소를 비교

 

String 클래스의 생성자 & 메서드 🔥

메서드  설명 예제
String(String s) 문자열 s를 갖는 String 인스턴스 생성 String s = new String("Hello");
String(char[] c) char[]의 값을 갖는 String 인스턴스 생성 char[] c = ['H', 'e', 'l', 'l', 'o'];
String s = new String(c);
String(StringBuffer sb) sb의 값을 갖는 String 인스턴스 생성 StringBuffer sb = new StringBuffer("Hello")
String s = new String(sb);
char charAt(int index) 지정된 위치에 있는 문자 리턴 (0부터 시작) String s = "EUNBIN";
char c = s.charAt(3);
int compareTo(String str) 문자열을 사전 순서로 비교함
같으면 0, 사전순으로 이전이면 음수,
사전순으로 다음이면 양수를 리턴
int i = "aaa".compareTo("aaa");
int i2 = "aaa".compareTo("bbb");
int i3 = "bbb".compareTo("aaa");
String concat(String str) 문자열 결합 String s1 = "Hello";
String s2 = s.concat("EUNBIN");
boolean contains(CharSequence s) 지정된 문자열이 포함되어있는지 검사 s.contain("abc")
boolean endsWith(String suffix) 지정된 문자열로 끝나는지 검사 String file = "Hello.txt";
boolean b = file.endsWith("txt");
boolean equals(Object obj) 문자열의 "값"을 비교 String s = "Hello";
boolean b = s.equals("Hello");
boolean equalsIgnoreCase(String str) 문자열을 대소문자 구분없이 비교 String s = "Hello";
boolean b = s.equalsIgnoreCase("Hello");
int indexOf(int ch) 주어진 문자가 문자열에 존재하는지 확인하여
인덱스 위치를 알려줌  (없다면 -1 리턴)
String s = "Hello";
int index = s.indexOf("H");
String[] split(String regex) 문자열을 분리자로 나누어 배열 형태로 리턴 String animals = "dog,cat,bear";
String[] arr = animals.split(",");
boolean startsWith(String prefix) 주어진 문자열로 시작하는지 검사 String s = "java.lang.Object";
boolean b = s.startsWith("java");
String substring(int begin, int end) 주어진 시작위치 ~ 마지막 위치의 문자열을 얻음 (마지막 위치는 포함되지 않는다.) String s = "EUNBIN LOVE";
String c = s.substring(3, 6);
==> BIN
String trim() 문자열의 양쪽 공백을 제거
(문자열 중간의 공백은 제거 X)
String s = "     Hello World!!     ";
String s1 = s.trim();
static String valueOf(Object obj) 지정된 값을 문자열로 리턴 String b = String.valueOf(true);
String i = String.valueOf(100);

 

join()과 StringJoiner 클래스

join()은 구분자를 이용해서 문자열을 결합하는 메서드이다. split()과 반대되는 메서드라고 생각하면 이해가 쉬움!

String.join(구분자, 배열) 형식으로 사용한다.

String animals = "dog,cat,bear";
String[] arr = animals.split(",");
String str = String.join("-", arr);
System.out.println(str); // dog-cat-bear

StringJoiner 클래스도 join()과 마찬가지로 문자열을 결합할 때 사용한다.

매개변수는 순서대로 "구분자", "접두사", "접미사"이다.

StringJoiner sj = new StringJoiner("-","[","]");
String[] arr = {"aaa", "bbb", "ccc"};

for(String s : arr){
	sj.add(s);
}

System.out.println(sj.toString());

String.format()

String.format()은 형식화된 문자열을 만들때 사용하는 메서드이다. printf()와 사용법이 완전히 동일해서 쉽게 사용할 수 있다.

String str = String.format("%d + %d = %d", 3, 5, (3+5));

String 변환 방법

▶ 기본형 -> 문자열

1. 기본형 + ""(빈 문자열)

2. String.valueOf()

int i = 100;
String str = i + "";
String str2 = String.valueOf(i);

▶ 문자열 -> 기본형

1. valueOf()

2. parseInt()

int i = Integer.parseInt("100");
int i2 = Integer.valueOf("100");

 

오늘은 String 클래스의 기초적인 부분을 정리했습니다. 다음 포스팅엔 StringBuffer / StringBuilder를 정리해보려고 합니다.

오늘 작성한 내용은 정말 기초적이고 중요한 내용이기 때문에 잘 알아두고 가면 정말 좋을 것 같습니다!! ☺️

728x90