๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Java

[Java] String ํด๋ž˜์Šค ์ •๋ฆฌ

๋ฐ˜์‘ํ˜•

String ํด๋ž˜์Šค ์ •๋ฆฌ

์ž๋ฐ”์˜ ์‹ ์„ ์ฝ์œผ๋ฉด์„œ ๋‚˜์˜จ String ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •๋ฆฌํ–ˆ๋‹ค. ๋” ๋งŽ์€ ๋ฉ”์†Œ๋“œ๋“ค๊ณผ ์ž์„ธํ•œ ์„ค๋ช…์ด ์žˆ์ง€๋งŒ ๋งŽ์ด ์‚ฌ์šฉํ•  ๊ฒƒ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋“ค ์œ„์ฃผ๋กœ ์ •๋ฆฌํ–ˆ๋‹ค.

  • ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • ๋ฌธ์ž์—ด์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • ๋ฌธ์ž์—ด์ด ๊ฐ™์€์ง€ ๋น„๊ตํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ๋ฌธ์ž์—ด์ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • String๋‚ด์—์„œ ์œ„์น˜๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๋ฉ”์†Œ๋“œ
  • String์—์„œ ์ผ๋ถ€๋ฅผ ์ถ”์ถœํ•˜๋Š”(์ž˜๋ผ์ฃผ๋Š”) ๋ฉ”์†Œ๋“œ
  • String ๊ณต๋ฐฑ์„ ์—†์• ๋Š” ๋ฉ”์†Œ๋“œ
  • String ๋‚ด์šฉ์„ ๊ต์ฒดํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฉ”์†Œ๋“œ
  • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • StringBuffer์™€ StringBuilder

๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ

๋ฆฌํ„ด ํƒ€์ž… ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ๋ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„ค๋ช…
int length() ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

๋ฌธ์ž์—ด์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ

๋ฆฌํ„ด ํƒ€์ž… ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ๋ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„ค๋ช…
boolean isEmpty() ๋ฌธ์ž์—ด์ด ๋น„์–ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธ. ๋น„์–ด ์žˆ์œผ๋ฉด true๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

๋ฌธ์ž์—ด์ด ๊ฐ™์€์ง€ ๋น„๊ตํ•˜๋Š” ๋ฉ”์†Œ๋“œ

๋ฆฌํ„ด ํƒ€์ž… ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ๋ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜
boolean equals(Object anObject)
boolean equalsIgnoreCase(String anotherStr)
int compareTo(String anotherStr)
int compareToIgnoreCase(String str)
boolean contentEquals(CharSequence cs)
boolean contentEquals(StringBuilder sb)

String ํด๋ž˜์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฌธ์ž์—ด์ด ๊ฐ™์€์ง€๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋“ค์€ ๋‹ค์–‘ํ•˜๋‹ค. IgnoreCase๊ฐ€ ๋ถ™์€ ๋ฉ”์†Œ๋“œ๋“ค์€ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์„ ํ•˜์ง€ ์•Š๊ณ  ๋น„๊ตํ•œ๋‹ค.

  • equals๋Š” ๋ฌธ์ž์—ด์ด ๊ฐ™์€์ง€๋ฅผ true, false๋กœ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.
  • compareTo๋Š” ์•ŒํŒŒ๋ฒณ ์ˆœ์œผ๋กœ ์•ž์— ์žˆ์œผ๋ฉด ์–‘์ˆ˜, ๋’ค์— ์žˆ์œผ๋ฉด ์Œ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ  ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋งŒํผ ๊ทธ ์ˆซ์ž๊ฐ’์ด ์ปค์ง„๋‹ค.
  • contentEquals๋Š” CharSequence์™€ StringBuilder ๊ฐ์ฒด์˜ ๋‚ด์šฉ์„ ๋น„๊ตํ•œ๋‹ค.

๋ณดํ†ต equals()์™€ "=="์˜ ์ฐจ์ด๋ฅผ ์ž˜ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— "=="์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ •ํ™•ํ•œ ๋น„๊ต๋ฅผ ์œ„ํ•ด์„œ๋Š” equals()๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. ์ด์œ ๋Š” ๋‹ค์Œ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

String text = "Check";
String text2 = "Check";
String text3 = new String("Check");
System.out.println(text==text2);
System.out.println(text==text3);
System.out.println(text.equals(text3));

์œ„ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

true
false
true

๋ชจ๋‘ "Check"๋ผ๋Š” ๋ฌธ์ž์—ด์ด์ง€๋งŒ text==text3์ด false๋ผ๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋ฐ”๋กœ ์ž๋ฐ”์— Constant Pool์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ž๋ฐ”์—์„œ๋Š” ๊ฐ์ฒด๋“ค์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ Constant Pool์ด๋ผ๋Š” ๊ฒƒ์ด ๋งŒ๋“ค์–ด์ ธ ์žˆ๊ณ , String์˜ ๊ฒฝ์šฐ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ–๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฉด, ์ด๋ฏธ ๋งŒ๋“  ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ž˜์„œ text์™€ text2๋Š” ๊ฐ™์€ ๊ฐ์ฒด์ด๊ณ  text3๋Š” ์ƒˆ๋กœ ์ƒ์„ฑ์„ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅด๋‹ค๊ณ  ์ธ์‹ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
"==" ์—ฐ์‚ฐ์€ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์—ฐ์‚ฐ์ด๊ณ , equals()๋Š” ๋ฌธ์ž์—ด์˜ ๋‚ด์šฉ์ด ๊ฐ™์€์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ธ ๊ฒƒ์ด๋‹ค.

ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ๋ฌธ์ž์—ด์ด ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ

๋ฆฌํ„ด ํƒ€์ž… ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ๋ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„ค๋ช…
boolean startsWith(String prefix) ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ์ค€ ๊ฐ’์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.
boolean endsWith(String suffix) ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋„˜์–ด์˜จ ๊ฐ’์œผ๋กœ ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ๋๋‚˜๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.
boolean contains(CharSequence s) ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋„˜์–ด์˜จ ๊ฐ’์ด ๋ฌธ์ž์—ด์— ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.
boolean matches(String regex) ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ๋„˜์–ด์˜จ "์ •๊ทœ ํ‘œํ˜„์‹"์ด ๋ฌธ์ž์—ด์— ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.

String๋‚ด์—์„œ ์œ„์น˜๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๋ฉ”์†Œ๋“œ

๋ฆฌํ„ด ํƒ€์ž… ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ๋ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜
int indexOf(int ch)
int indexOf(String str)

์•ž์—์„œ๋ถ€ํ„ฐ(๊ฐ€์žฅ ์™ผ์ชฝ๋ถ€ํ„ฐ) ๋ฌธ์ž์—ด์ด๋‚˜ char์„ ์ฐพ๋Š”๋‹ค.

String์—์„œ ์ผ๋ถ€๋ฅผ ์ถ”์ถœํ•˜๋Š”(์ž˜๋ผ์ฃผ๋Š”) ๋ฉ”์†Œ๋“œ

๋ฆฌํ„ด ํƒ€์ž… ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ๋ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„ค๋ช…
char charAt(int index) ํŠน์ • ์œ„์น˜์˜ char ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.
static String copyValueOf(char[] data) char ๋ฐฐ์—ด์— ์žˆ๋Š” ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
char[] toCharArray() ๋ฌธ์ž์—ด์„ char ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
String substring(int beginIndex) beginIndex๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋Œ€์ƒ ๋ฌธ์ž์—ด์„ ์ž˜๋ผ String์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.
String substring(int beginIndex, int endIndex) beginIndex๋ถ€ํ„ฐ endIndex๊นŒ์ง€ ๋Œ€์ƒ ๋ฌธ์ž์—ด์„ ์ž˜๋ผ String์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.
String[] split(String regex) regwx์— ์žˆ๋Š” ์ •๊ทœ ํ‘œํ˜„์‹์— ๋งž์ถ”์–ด ๋ฌธ์ž์—ด์„ ์ž˜๋ผ String์˜ ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.

String ๊ณต๋ฐฑ์„ ์—†์• ๋Š” ๋ฉ”์†Œ๋“œ

๋ฆฌํ„ด ํƒ€์ž… ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ๋ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„ค๋ช…
String trim() ๋ฌธ์ž์—ด์˜ ๋งจ ์•ž๊ณผ ๋งจ ๋’ค์— ์žˆ๋Š” ๊ณต๋ฐฑ๋“ค์„ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
``` java    
it(text != null && text.trim().length() > 0)    
```    
์œ„์— ์กฐ๊ฑด์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ณต๋ฐฑ๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.    

String ๋‚ด์šฉ์„ ๊ต์ฒดํ•˜๋Š” ๋ฉ”์†Œ๋“œ

๋ฆฌํ„ด ํƒ€์ž… ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ๋ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„ค๋ช…
String replace(char oldChar, char newChar) ํ•ด๋‹น ๋ฌธ์ž์—ด์— ์žˆ๋Š” oldChar์„ newChar๋กœ ๊ต์ฒดํ•œ๋‹ค.
String replace(CharSequence target, CharSequence replacement) ํ•ด๋‹น ๋ฌธ์ž์—ด์— ์žˆ๋Š” target๊ณผ ๊ฐ™์€ ๊ฐ’์„ replacement๋กœ ๊ต์ฒดํ•œ๋‹ค.
String replace(String regex, String replacement) ํ•ด๋‹น ๋ฌธ์ž์—ด์˜ ๋‚ด์šฉ ์ค‘ regex์— ํ‘œํ˜„๋œ ์ •๊ทœ ํ‘œํ˜„์‹์— ํฌํ•จ๋˜๋Š” ๋ชจ๋“  ๋‚ด์šฉ์„ replacement๋กœ ๊ต์ฒดํ•œ๋‹ค.
String replaceFirst(String regex, String replacement) ํ•ด๋‹น ๋ฌธ์ž์—ด์˜ ๋‚ด์šฉ ์ค‘ regex์— ํ‘œํ˜„๋œ ์ •๊ทœ ํ‘œํ˜„์‹์— ํฌํ•จ๋˜๋Š” ์ฒซ๋ฒˆ์งธ ๋‚ด์šฉ์„ replacement๋กœ ๊ต์ฒดํ•œ๋‹ค.

๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฉ”์†Œ๋“œ

๋ฆฌํ„ด ํƒ€์ž… ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ๋ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„ค๋ช…
String toLowerCase() ๋ชจ๋“  ๋ฌธ์ž์—ด์˜ ๋‚ด์šฉ์„ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
String toUpperCase() ๋ชจ๋“  ๋ฌธ์ž์—ด์˜ ๋‚ด์šฉ์„ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

๊ธฐ๋ณธ ์ž๋ฃŒํ˜•์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œ

๋ฆฌํ„ด ํƒ€์ž… ๋ฉ”์†Œ๋“œ ์ด๋ฆ„ ๋ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„ค๋ช…
static String valueOf() ๊ธฐ๋ณธ ์ž๋ฃŒํ˜•๋“ค์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ ์‹œ์ผœ์ค€๋‹ค.

StringBuffer์™€ StringBuilder

String์€ immutable(๋ถˆ๋ณ€)ํ•œ ๊ฐ์ฒด์ด๋‹ค. String์€ ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด ์ง€๋ฉด ๋” ์ด์ƒ ๊ทธ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜๊ฐ€ ์—†๋‹ค. ๊ทธ๋ž˜์„œ + ์—ฐ์‚ฐ์„ ํ•  ๋•Œ String ๊ฐ์ฒด๊ฐ€ ๋ณ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , ์ƒˆ๋กœ์šด String ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ธฐ์กด ๊ฐ์ฒด๋Š” ๋ฒ„๋ ค์ง€๊ฒŒ ๋œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ String ๊ฐ์ฒด๋ฅผ ๋”ํ•˜๋Š” ์ž‘์—…์„ ๊ณ„์†ํ•˜๋ฉด ํ•  ์ˆ˜๋ก ๊ณ„์†ํ•ด์„œ ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‚˜์˜จ ํด๋ž˜์Šค๊ฐ€ StringBuffer์™€ StringBuilder์ด๋‹ค.

๋‘ ํด๋ž˜์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” ๋™์ผํ•˜์ง€๋งŒ, StringBuffer๋Š” Thread safe ํ•˜๊ณ , StringBuilder๋Š” Thread safe ํ•˜์ง€ ์•Š๊ณ  ๋” ๋น ๋ฅด๋‹ค.

์ด ๋‘ ํด๋ž˜์Šค๋Š” append() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๊ณ„์†ํ•ด์„œ ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" World);
StringBuilder sb = new StringBuilder();
sb.append("Hello").append(" World");

์ถ”๊ฐ€๋กœ JDK 5 ์ด์ƒ์—์„œ๋Š” String ๋”ํ•˜๊ธฐ ์—ฐ์‚ฐ์„ ํ•  ๊ฒฝ์šฐ, ์ปดํŒŒ์ผ ํ•  ๋•Œ ์ž๋™์œผ๋กœ StringBuilder๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ผ์ผ์ด ๋”ํ•˜๋Š” ์ž‘์—…์„ ๋ณ€ํ™˜ํ•ด ์ค„ ํ•„์š”๋Š” ์—†์ง€๋งŒ, for ๋ฃจํ”„์™€ ๊ฐ™์ด ๋ฐ˜๋ณต ์—ฐ์‚ฐ์„ ํ•  ๋•Œ์—๋Š” ์ž๋™์œผ๋กœ ๋ณ€ํ™˜์„ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ผญ ํ•„์š”ํ•˜๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

์ž๋ฐ”์˜ ็ฅž1 2nd Edition / ์ด์ƒ๋ฏผ ์ง€์Œ

๋ฐ˜์‘ํ˜•

'Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] ์ž๋ฐ” ์ปฌ๋ ‰์…˜ Map  (0) 2022.01.11
[Java] ์ž๋ฐ” ์ปฌ๋ ‰์…˜ Set  (0) 2022.01.11
[Java] ์ƒ์†์ด๋ž€?  (0) 2022.01.06
[Java] ๋ณ€์ˆ˜์™€ ์ž๋ฃŒํ˜•  (0) 2022.01.04
[Java] ์ž๋ฐ” ArrayList ์ •๋ฆฌ  (0) 2021.09.16