BackEnd🌱/Java

[Java] String 클래슀

dkswnkk 2022. 4. 5. 00:49

μ„œλ‘ 

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 μΈμŠ€ν„΄μŠ€)

λ¬Έμžμ—΄μ„ λ§Œλ“€ λ•Œμ—λŠ” 두 가지 방법이 μžˆμŠ΅λ‹ˆλ‹€.

  1. λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ„ μ§€μ •ν•˜λŠ” 방법 (String s = "abc");
  2. 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 μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ€ 이미 μ‘΄μž¬ν•˜λŠ” 것을 μž¬μ‚¬μš©ν•©λ‹ˆλ‹€. (λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄μ€ ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ  λ•Œ μžλ™μ μœΌλ‘œ 미리 μƒμ„±λ©λ‹ˆλ‹€.)

λ”°λΌμ„œ μœ„ μ½”λ“œκ°€ μ‹€ν–‰λ˜μ—ˆμ„ λ•Œ 상황을 μ΄λ―Έμ§€λ‘œ λ‚˜νƒ€λ‚΄λ©΄ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

쒌) λ¬Έμžμ—΄ λ¦¬ν„°λŸ΄ 지정, 우) 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의 κ΅¬μ„±μš”μ†Œ 같은 경우 μ œκ°€ 이전에 μ •λ¦¬ν•œ κ²Œμ‹œκΈ€μ΄ μžˆμœΌλ‹ˆ μ°Έκ³ ν•˜μ‹€ λ•Œ 도움이 될 것 κ°™μŠ΅λ‹ˆλ‹€.

 

[Java] JVM의 λ©”λͺ¨λ¦¬ κ΅¬μ„±μš”μ†Œμ™€ μ˜μ—­μ— κ΄€ν•œ κ³ μ°°

μ„œλ‘  μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λ©΄, JVM은 μ‹œμŠ€ν…œμœΌλ‘œλΆ€ν„° ν”„λ‘œκ·Έλž¨μ„ μˆ˜ν–‰ν•˜λŠ”λ° ν•„μš”ν•œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήλ°›κ³  JVM은 이 λ©”λͺ¨λ¦¬λ₯Ό μš©λ„μ— 따라 μ—¬λŸ¬ μ˜μ—­μœΌλ‘œ λ‚˜λˆ„μ–΄ κ΄€λ¦¬ν•©λ‹ˆλ‹€. κ·Έλ ‡μ§€λ§Œ μ—¬κΈ°μ„œ μ—¬

dkswnkk.tistory.com

 

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