Java String Class

문자열 다루기

Quick Overview


Create String

  1. Double Quotes:
    간단하고, 선호되는 방법. String 객체는 String Pool에 저장된다.
    e.g. String s1 = "Hello";

  2. new operator:
    Heap Memory에 저장되며, String Pool의 이점을 취하지 못함.
    e.g. String s2 = new String("Hello");

java_string_pool


Immutability의 이점

단점

불변성에 의한 String Pool 사용으로 메모리와 퍼포먼스에서 이점을 가져가지만
또한 그 불변성 때문에 String을 조작할 때 많은 메모리와 비효율적 운영을 야기한다.
그래서, String을 조작을 위한 class로 StringBufferStringBuilder가 존재한다.
두 class들은 유사한데 StringBuffersynchronized하고
StringBuilder는 그렇지 않다는게 차이가 있다.


중요한 Methods 몇가지

1. 문자열 연결

String str0 = "Hello" + "World!";
String str1 = "Hello".concat("World!");

System.out.println(str0.equals(str1));

--------------------------------------
Output:

true

2. index로 문자 조회

char ch = "012345".charAt(4);

System.out.println(ch);

-------------------------------------
Output:

4

3. 문자로 index 조회 (charAt()과 반대)

int index0 = "Hello World".indexOf("l");
int index1 = "Hello World".lastindexOf("l");

System.out.println(index0);
System.out.println(index1);

---------------------------------------------
Output:

2
9

4. 문자 치환

String str0 = "Hello World!".replace("l", "L");
String str1 = "Hello World!".replaceFirst("l", "L");

System.out.println(str0);
System.out.println(str1);

----------------------------------------------
Output:

HeLLo WorLd!
HeLlo World!

5. 여러 문자 치환

String str = "01234556789".substring(2, 5);

System.out.println(str);

---------------------------------------------
Output:

234

6. 대, 소문자 변경

String str0 = "Hello World!".toLowerCase();
String str1 = "Hello World!".toUpperCase();

System.out.println(str0);
System.out.println(str1);

--------------------------------------------
Output:

hello world!
HELLO WORLD!

7. 공백 제거

String str = "     Hello World!          ".trim();

System.out.println(str);

--------------------------------------------------
Output:

Hello World!

8. 문자열 나누기

String[] str_array0 = "Hello World".split(" ");
String[] str_array1 = "Hello World".split("");

for (String str: str_array0) {
	System.out.println(str);
}

for (String str: str_array1) {
	System.out.println(str);
}

--------------------------------------------------
Output:

Hello
World
H
e
l
l
o
W
o
r
l
d

9. 시작, 끝 문자 확인

String str = "Hello World!";

boolean isTrue0 = str.startsWith("Hell");
boolean isTrue1 = str.endsWith("orld!");

System.out.println(isTrue0);
System.out.println(isTrue1);
------------------------------------------
Output:

true
true

10. 문자열 비교

참고) Difference between ‘==’ and equals()

primitive type: int, float, double, byte, long 등…
CBV(Call By Value), 값에 의한 호출

reference type: Array, class 등…
CBR(Call By Reference), 참조에 의한 호출

’==’는 주소값을 비교

String a = "abc";
String b = "abc";
String c = new String("abc");

System.out.println(System.identityHashCode(a));
System.out.println(System.identityHashCode(b));
System.out.println(System.identityHashCode(c));

System.out.println(a.equals(b));
System.out.println(a.equals(c));
System.out.println(a==b);
System.out.println(a==c);

-----------------------------------------------
Output:

2001112025 (임의값)
2001112025 (임의값)
1919900000 (임의값)
true
true
true
false

11. 특정 문자열 포함관계 확인

boolean isContain = "Hello World".contains("Worl");

System.out.println(siContain);

----------------------------------------------------
Output:

true

참고 사이트

주소: https://www.javastring.net