[Java] String ν΄λμ€
μλ‘
cμΈμ΄ κ°μ κ²½μ° λ¬Έμμ΄μ charνμ λ°°μ΄λ‘ λ€λ£¨μμ§λ§ μλ°μμλ λ¬Έμμ΄μ μν ν΄λμ€λ₯Ό μ 곡ν©λλ€. κ·Έκ²μ΄ λ°λ‘ String ν΄λμ€μΈλ°, String ν΄λμ€λ λ¬Έμμ΄μ μ μ₯νκ³ μ΄λ₯Ό λ€λ£¨λλ° νμν μλ§μ λ©μλλ€μ ν¨κ» μ 곡ν©λλ€. μ΄λ² κ²μκΈμμλ μ΄λ¬ν String ν΄λμ€μ ꡬμ±κ³Ό λ©μλλ€μ λν΄ νλ² μ λ¦¬ν΄ λ³΄κ² μ΅λλ€.
λͺ©μ°¨
1. λ³κ²½ λΆκ°λ₯ν(immutable) ν΄λμ€
2. λ¬Έμμ΄μ λΉκ΅(리ν°λ΄ vs μΈμ€ν΄μ€, == vs equals)
3. λ¬Έμμ΄ λ¦¬ν°λ΄
4. String ν΄λμ€μ μμ±μμ λ©μλ
1) λ³κ²½ λΆκ°λ₯ν(immutable) ν΄λμ€
νλ² μμ±λ String μΈμ€ν΄μ€κ° κ°κ³ μλ λ¬Έμμ΄μ μ½μ΄ μ¬ μλ§ μκ³ , λ³κ²½ν μλ μμ΅λλ€. μλ₯Ό λ€μ΄ μλμ μ½λμ κ°μ΄ '+'μ°μ°μλ₯Ό μ΄μ©ν΄μ λ¬Έμμ΄μ κ²°ν©νλ κ²½μ° μΈμ€ν΄μ€ λ΄μ λ¬Έμμ΄μ΄ λ°λλ κ²μ΄ μλλΌ μλ‘μ΄ λ¬Έμμ΄("ab")μ΄ λ΄κΈ΄ String μΈμ€ν΄μ€κ° μμ±λλ κ²μ λλ€.
public static void main(String[] args) {
String a = "a";
String b = "b";
a = a + b;
}
μ΄μ²λΌ λ§μ μ°μ°μ '+'λ₯Ό μ¬μ©ν΄μ λ¬Έμμ΄μ κ²°ν©νλ κ²μ 맀 μ°μ° μλ§λ€ μλ‘μ΄ λ¬Έμμ΄μ κ°μ§ String μΈμ€ν΄μ€κ° μμ±λμ΄ λ©λͺ¨λ¦¬ 곡κ°μ μ°¨μ§νκ² λλ―λ‘ κ°λ₯ν κ²°ν© νμλ₯Ό μ€μ΄λ κ²μ΄ μ’μ΅λλ€.
λ¬Έμμ΄κ°μ κ²°ν©μ΄λ μΆμΆ λ± λ¬Έμμ΄μ λ€λ£¨λ μμ μ΄ λ§μ΄ νμν κ²½μ°μλ String ν΄λμ€ λμ StringBuffer ν΄λμ€λ₯Ό μ¬μ©νλ κ²μ΄ μ’μ΅λλ€. StringBuffer μΈμ€ν΄μ€μ μ μ₯λ λ¬Έμμ΄μ λ³κ²½μ΄ κ°λ₯νλ―λ‘ νλμ StringBuffer μΈμ€ν΄μ€λ§μΌλ‘λ λ¬Έμμ΄μ λ€λ£¨λ κ²μ΄ κ°λ₯ν©λλ€.
2-1) λ¬Έμμ΄μ λΉκ΅(리ν°λ΄ vs μΈμ€ν΄μ€)
λ¬Έμμ΄μ λ§λ€ λμλ λ κ°μ§ λ°©λ²μ΄ μμ΅λλ€.
- λ¬Έμμ΄ λ¦¬ν°λ΄μ μ§μ νλ λ°©λ² (String s = "abc");
- String ν΄λμ€μ μμ±μλ₯Ό μ¬μ©ν΄μ λ§λλ λ°©λ²(String s = new String("abc"));
public static void main(String[] args) {
String str1 = "abc"; // λ¬Έμμ΄ λ¦¬ν°λ΄ "abc"μ μ£Όμκ° str1μ μ μ₯λ¨
String str2 = "abc"; // λ¬Έμμ΄ λ¦¬ν°λ΄ "abc"μ μ£Όμκ° str2μ μ μ₯λ¨
String str3 = new String("abc"); // μλ‘μ΄ String μΈμ€ν΄μ€λ₯Ό μμ±
String str4 = new String("abc"); // μλ‘μ΄ String μΈμ€ν΄μ€λ₯Ό μμ±
}
String ν΄λμ€μ μμ±μλ₯Ό μ΄μ©ν κ²½μ°μλ new μ°μ°μμ μν΄μ λ©λͺ¨λ¦¬ ν λΉμ΄ μ΄λ£¨μ΄μ§κΈ° λλ¬Έμ νμ μλ‘μ΄ String μΈμ€ν΄μ€κ° μμ±λ©λλ€. κ·Έλ¬λ λ¬Έμμ΄ λ¦¬ν°λ΄μ μ΄λ―Έ μ‘΄μ¬νλ κ²μ μ¬μ¬μ©ν©λλ€. (λ¬Έμμ΄ λ¦¬ν°λ΄μ ν΄λμ€κ° λ©λͺ¨λ¦¬μ λ‘λλ λ μλμ μΌλ‘ 미리 μμ±λ©λλ€.)
λ°λΌμ μ μ½λκ° μ€νλμμ λ μν©μ μ΄λ―Έμ§λ‘ λνλ΄λ©΄ μλμ κ°μ΅λλ€.
2-2) λ¬Έμμ΄μ λΉκ΅('==' vs 'equals')
μλ°μμ == μ°μ°μ μ£Όμ κ°μ΄ κ°μμ§ μλμ§ λΉκ΅νμ§λ§, equals() μ°μ°μ λ΄λΆμ μΌλ‘ μ£Όμ κ°μ λΉκ΅νμ§λ§ String ν΄λμ€μμ equals()λ₯Ό μ€λ²λΌμ΄λ©νμ¬ μ£Όμ κ°μ΄ μλ κ°μ λΉκ΅νλλ‘ μ¬μ μ λμ΄ μμ΅λλ€. μλ μ½λλ₯Ό νλ² μ΄ν΄λ΄ μλ€.
public static void main(String[] args) {
String str1 = "abc"; // λ¬Έμμ΄ λ¦¬ν°λ΄ "abc"μ μ£Όμκ° str1μ μ μ₯λ¨
String str2 = "abc"; // λ¬Έμμ΄ λ¦¬ν°λ΄ "abc"μ μ£Όμκ° str2μ μ μ₯λ¨
String str3 = new String("abc"); // μλ‘μ΄ String μΈμ€ν΄μ€λ₯Ό μμ±
String str4 = new String("abc"); // μλ‘μ΄ String μΈμ€ν΄μ€λ₯Ό μμ±
if (str1 == str2) System.out.println("true");
else System.out.println("false");
if (str3 == str4) System.out.println("true");
else System.out.println("false");
System.out.println("str1.equals(str2)= " + str1.equals(str2));
System.out.println("str3.equals(str4)= " + str3.equals(str4));
}
equals()λ₯Ό μ¬μ©νμ λλ λ λ¬Έμμ΄μ λ΄μ©("abc")μ λΉκ΅νκΈ° λλ¬Έμ μ λΆ trueλ₯Ό κ²°κ³Όλ‘ μ»μ΅λλ€. νμ§λ§, κ° String μΈμ€ν΄μ€μ μ£Όμλ₯Ό λ±κ°λΉκ΅μ°μ°μ '=='λ‘ λΉκ΅νμ λλ κ²°κ³Όκ° λ€λ₯΄κ² λμ΅λλ€.
3) λ¬Έμμ΄ λ¦¬ν°λ΄
μλ° μμ€νμΌμ ν¬ν¨λ λͺ¨λ λ¬Έμμ΄ λ¦¬ν°λ΄μ μ»΄νμΌ μμ ν΄λμ€ νμΌμ μ μ₯λ©λλ€. μ΄ λ κ°μ λ΄μ©μ λ¬Έμμ΄ λ¦¬ν°λ΄μ ν λ²λ§ μ μ₯λ©λλ€. λ¬Έμμ΄ λ¦¬ν°λ΄λ String μΈμ€ν΄μ€μ΄κ³ , νλ² μμ±νλ©΄ λ΄μ©μ λ³κ²½ν μ μμΌλ νλμ μΈμ€ν΄μ€λ₯Ό 곡μ νλ©΄ λκΈ° λλ¬Έμ λλ€.
public class Test {
public static void main(String[] args) {
String s1 = "AAA";
String s2 = "AAA";
String s3 = "AAA";
String s4 = "AAA";
}
}
μ μ½λλ₯Ό μ€ννλ©΄ "AAA"λ₯Ό λ΄κ³ μλ String μΈμ€ν΄μ€κ° νλ μμ±λ ν, μ°Έμ‘°λ³μ s1, s2, s3λ λͺ¨λ μ΄ κ°μ String μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νκ² λ©λλ€.
ν΄λμ€ νμΌμλ μμ€νμΌμ ν¬ν¨λ λͺ¨λ 리ν°λ΄μ λͺ©λ‘μ΄ μμ΅λλ€. ν΄λΉ ν΄λμ€ νμΌμ΄ ν΄λμ€ λ‘λμ μν΄ λ©λͺ¨λ¦¬μ μ¬λΌκ° λ, μ΄ λ¦¬ν°λ΄μ λͺ©λ‘μ μλ 리ν°λ΄λ€μ΄ JVMλ΄μ μλ 'μμ μ μ₯μ(constant pool)'μ μ μ₯λ©λλ€. μ΄λ, μ΄κ³³μ "AAA"μ κ°μ λ¬Έμμ΄ λ¦¬ν°λ΄μ΄ μλμ μΌλ‘ μμ±λμ΄ μ μ₯λλ κ²μ λλ€.
ν΄λμ€ λ‘λκ° λ©λͺ¨λ¦¬μ μ¬λΌκ°λ κ³Όμ κ³Ό JVMμ ꡬμ±μμ κ°μ κ²½μ° μ κ° μ΄μ μ μ 리ν κ²μκΈμ΄ μμΌλ μ°Έκ³ νμ€ λ λμμ΄ λ κ² κ°μ΅λλ€.
4) String ν΄λμ€μ μμ±μμ λ©μλ
1. String(String s)
/*
μ£Όμ΄μ§ λ¬Έμμ΄(s)μ κ°λ String μΈμ€ν΄μ€λ₯Ό μμ±νλ€.
*/
String s = new String ("Hello");
System.out.println(s);
// μΆλ ₯κ²°κ³Ό: Hello
2. String[char[] value)
/*
μ£Όμ΄μ§ λ¬Έμμ΄(value)μ κ°λ String μΈμ€ν΄μ€λ₯Ό μμ±νλ€.
*/
char[] c = {'H', 'e', 'l', 'l', 'o'};
String s = new String(c);
System.out.println(s);
// μΆλ ₯κ²°κ³Ό: Hello
3. String(StringBuffer buf)
/*
StringBuffe μΈμ€ν΄μ€κ° κ°κ³ μλ λ¬Έμμ΄κ³Ό κ°μ λ΄μ©μ String μΈμ€ν΄μ€λ₯Ό μμ±νλ€.
*/
StringBuffer sb = new StringBuffer("Hello");
String s = new String(sb);
System.out.println(sb);
// μΆλ ₯κ²°κ³Ό: Hello
4. charAt(index)
/*
μ§μ λ μμΉ(index)μ μλ λ¬Έμλ₯Ό μλ €μ€λ€.(indexλ 0λΆν° μμ)
*/
String s = "Hello";
System.out.println(s.charAt(1));
// μΆλ ₯κ²°κ³Ό: e
4. int compareTo(String str)
/*
λ¬Έμμ΄(str)κ³Ό μ¬μ μμλ‘ λΉκ΅νλ€.
κ°μΌλ©΄ 0, μ¬μ μμΌλ‘ μ΄μ μ΄λ©΄ μμ, μ΄νλ©΄ μμλ₯Ό λ°ννλ€.
*/
int i = "aaa".compareTo("aaa");
int i2 = "aaa".compareTo("bbb");
int i3 = "bbb".compareTo("aaa");
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
// μΆλ ₯κ²°κ³Ό: 0, 1, 3
5. String concat(String str)
/*
λ¬Έμμ΄(str)μ λ€μ λ§λΆμΈλ€.
*/
String s = "Hello";
String s2 = s.concat(" World");
System.out.println(s2);
// μΆλ ₯κ²°κ³Ό: Hello World
6. boolean endsWith(String suffix)
/*
μ§μ λ λ¬Έμμ΄(suffix)λ‘ λλλμ§ κ²μ¬νλ€.
*/
String s = "Hello.txt";
boolean b = s.endsWith("txt");
System.out.println(b);
// μΆλ ₯κ²°κ³Ό: true
7. boolean contains(CharSequence s)
/*
μ§μ λ λ¬Έμμ΄(s)μ΄ ν¬ν¨λμ΄μλμ§ κ²μ¬νλ€.
*/
String s = "abcedfg";
boolean b = s.contains("bc");
System.out.println(b);
// μΆλ ₯κ²°κ³Ό: true
8. boolean equalsIgnoreCase(String str)
/*
λ¬Έμμ΄κ³Ό String μΈμ€ν΄μ€μ λ¬Έμμ΄μ λμλ¬Έμ ꡬλΆμμ΄ λΉκ΅νλ€.
*/
String s = "Hello";
boolean b = s.equalsIgnoreCase("hello");
System.out.println(b);
// μΆλ ₯κ²°κ³Ό: true
9. int indexOf(int ch)
/*
μ£Όμ΄μ§ λ¬Έμ(ch)κ° λ¬Έμμ΄μ μ‘΄μ¬νλμ§ νμΈνμ¬ μμΉ(index)λ₯Ό μλ €μ€λ€.
λͺ» μ°ΎμΌλ©΄ -1μ λ°ννλ€.(indexλ 0λΆν° μμ)
*/
String s = "Hello";
int idx1 = s.indexOf('o');
int idx2 = s.indexOf('k');
System.out.println(idx1);
System.out.println(idx2);
// μΆλ ₯κ²°κ³Ό: 4, -1
10. int indexOf(int ch, int pos)
/*
μ£Όμ΄μ§ λ¬Έμ(ch)κ° λ¬Έμμ΄μ μ‘΄μ¬νλμ§ μ§μ λ μμΉ(pos)λΆν° νμΈνμ¬ μμΉ(index)λ₯Ό μλ €μ€λ€.
λͺ» μ°ΎμΌλ©΄ -1μ λ°ννλ€.(index λ 0λΆν° μμ)
*/
String s = "Hello";
int idx1 = s.indexOf('e', 0);
int idx2 = s.indexOf('e' ,2);
System.out.println(idx1);
System.out.println(idx2);
// μΆλ ₯κ²°κ³Ό: 1, -1
11. int indexOf(String str)
/*
μ£Όμ΄μ§ λ¬Έμμ΄μ΄ μ‘΄μ¬νλμ§ νμΈνμ¬ κ·Έ μμΉ(index)λ₯Ό μλ €μ€λ€.
μμΌλ©΄ -1μ λ°ννλ€.(indexλ 0λΆν° μμ)
*/
String s = "ABCDEFG";
int idx = s.indexOf("CD");
System.out.println(idx);
// μΆλ ₯κ²°κ³Ό: 2
12. String intern()
/*
λ¬Έμμ΄μ μμν(constant pool)μ λ±λ‘νλ€.
μ΄λ―Έ μμνμ κ°μ λ΄μ©μ λ¬Έμμ΄μ΄ μμ κ²½μ° κ·Έ λ¬Έμμ΄μ μ£Όμκ°μ λ°ννλ€.
*/
String s = new String("abc");
String s2 = new String("abc");
boolean b = (s == s2);
boolean b2 = s.equals(s2);
boolean b3 = (s.intern() == s2.intern());
System.out.println(b);
System.out.println(b2);
System.out.println(b3);
// μΆλ ₯κ²°κ³Ό: false, true, true
13. int lastIndexOf(int ch)
/*
μ§μ λ λ¬Έμ λλ λ¬Έμμ½λλ₯Ό λ¬Έμμ΄μ μ€λ₯Έμͺ½ λμμλΆν° μ°Ύμμ μμΉ(index)λ₯Ό μλ €μ€λ€.
λͺ» μ°ΎμΌλ©΄ -1μ λ°ννλ€.
*/
String s = "java.lang.Object";
int idx1 = s.lastIndexOf('.');
int idx2 = s.indexOf('.');
System.out.println(idx1);
System.out.println(idx2);
// μΆλ ₯κ²°κ³Ό: 9, 4
14. int lastIndexOf(String str)
/*
μ§μ λ λ¬Έμμ΄μ μΈμ€ν΄μ€μ λ¬Έμμ΄ λμμλΆν° μ°Ύμμ μμΉ(index)λ₯Ό μλ €μ€λ€.
λͺ» μ°ΎμΌλ©΄ -1μ λ°ννλ€.
*/
String s = "java.lang.java";
int idx1 = s.lastIndexOf("java");
int idx2 = s.indexOf("java");
System.out.println(idx1);
System.out.println(idx2);
// μΆλ ₯κ²°κ³Ό: 10, 0
15. String trim()
/*
λ¬Έμμ΄μ μΌμͺ½ λκ³Ό μ€λ₯Έμͺ½ λμ μλ 곡백μ μμ€ κ²°κ³Όλ₯Ό λ°ννλ€.
μ΄ λ λ¬Έμμ΄ μ€κ°μ μλ 곡백μ μ κ±°λμ§ μλλ€.
*/
String s = " Hello World ";
String s1 = s.trim();
System.out.println(s1);
// μΆλ ₯κ²°κ³Ό: Hello World
16. boolean startsWith(String prefix)
/*
μ£Όμ΄μ§ λ¬Έμμ΄(prefix)λ‘ μμνλμ§ κ²μ¬νλ€.
*/
String s = "java.lang.Object";
boolean b = s.startsWith("java");
boolean b2 = s.startsWith("lang");
System.out.println(b);
System.out.println(b2);
// μΆλ ₯κ²°κ³Ό: true, false
17. String replace(char old, char new)
/*
λ¬Έμμ΄ μ€μ λ¬Έμ(old)λ₯Ό μλ‘μ΄ λ¬Έμ(new)λ‘ λ°κΎΌ λ¬Έμμ΄μ λ°ννλ€.
*/
String s = "Hello";
String s1 = s.replace('H', 'h');
System.out.println(s1);
// μΆλ ₯κ²°κ³Ό: hello
18. String replace(CharSequence old, CharSequence new)
/*
λ¬Έμμ΄ μ€μ λ¬Έμμ΄(old)μ μλ‘μ΄ λ¬Έμμ΄(new)λ‘ λͺ¨λ λ°κΎΌ λ¬Έμμ΄μ λ°ννλ€.
*/
String s = "Hello";
String s1 = s.replace("ll", "LL");
System.out.println(s1);
// μΆλ ₯κ²°κ³Ό: HeLLo
19. String replaceAll(String regex, String replacement)
/*
λ¬Έμμ΄ μ€μμ μ§μ λ λ¬Έμμ΄(regex)κ³Ό μΌμΉνλ κ²μ μλ‘μ΄ λ¬Έμμ΄(replacement)λ‘ λͺ¨λ λ³κ²½νλ€.
*/
String ab = "AABBAABB";
String r = ab.replaceAll("BB", "bb");
System.out.println(r);
// μΆλ ₯κ²°κ³Ό: AAbbAAbb
20. String replaceFirst(String regex, String replacement)
/*
λ¬Έμμ΄ μ€μμ μ§μ λ λ¬Έμμ΄(regex)κ³Ό μΌμΉνλ κ² μ€, 첫 λ²μ§Έ κ²λ§ μλ‘μ΄ λ¬Έμμ΄(replacement)λ‘ λ³κ²½νλ€.
*/
String ab = "AABBAABB";
String r = ab.replaceAll("BB", "bb");
System.out.println(r);
// μΆλ ₯κ²°κ³Ό: AAbbAABB
21. Srtring [] split(String regex)
/*
λ¬Έμμ΄μ μ§μ λ λΆλ¦¬μ(regex)λ‘ λλμ΄ λ¬Έμμ΄ λ°°μ΄μ λ΄μ λ°ννλ€.
*/
String animals = "dog,cat,bear";
String [] arr = animals.split(",");
// arr[0] = dog, arr[1] = cat, arr[2] = bear