본문 바로가기

프로그래밍/Java

Java_java.lang패키지와 유용한 클래스(2)_String클래스

② String 클래스

: String 클래스란 문자열을 다루기 위한 클래스이다. 또한 내용을 변경할 수 없는 불변 클래스이다. 

String클래스 = 데이터 (char[]) + 메서드(문자열 관련)

 

 

- 덧셈 연산자(+)를 이용한 문자열 결합은 성능이 떨어지므로, 문자열의 결합이나 변경이 잦다면 내용을 변경가능한 'StringBuffer'를 사용하는 것이 좋다. 

 

 

- 문자열의 비교

class JavaJungsuk_String_Ex9_6 {
    public static void main(String args[]) {
        String str1="abc";
        String str2="abc";	//문자열 "abc"의 주소가 저장됨.
        System.out.println("String str1 = \"abc\";");
        System.out.println("String str2 = \"abc\";");
        
        System.out.println("str1 == str2 ? "+(str1==str2));
        System.out.println("str1.equals(str2) ? "+(str1.equals(str2));
        System.out.println();
        
        String str3=new String("abc");
        String str4=new String("abc");	//새로운 String인스턴스 생성.
        
        System.out.println("String str3 = new String(\"abc\");");
        System.out.println("String str4 = new String(\"abc\");");
        
        System.out.println("str3 == str4 ? "+(str3==str4));
        System.out.println("str3.equals(str4) ? "+str3.equals(str4));
    }
}

결과
String str1 = "abc";
String str2 = "abc";
str1 == str2 ? true
str1.equals(str2) ? true

String str3 = new String("abc");
String str4 = new String("abc");
str3 == str4 ? false
str3.equals(str4) ? true

→ equals()를 사용했을 때는 두 문자열의 내용을 비교하기 때문에 두 경우 모두 true를 반환하지만, 

String인스턴스의 주소를 등가비교연산자 '=='로 비교했을 때는 false를 반환한다. 

 

 

- 빈 문자열 

: 내용이 없는 문자열. 크기가 0인 char형 배열을 저장하는 문자열.

String s= null;
char c='\u0000';


↓
String s="";
char c=' ';

→ char형 변수에는 반드시 하나의 문자를 지정해야한다. 그렇기 때문에 ' '사이를 띄어 공백을 만들어준 것이다. 

 

class JavaJungsuk_String_Ex9_8 {
    public static void main(String[] args) {
        char[] cArr=new char[0];
        String s=new String(cArr);
        
        System.out.println("cArr.length="+cArr.length);
        System.out.println("@@@"+s+"@@@");
    }
}

결과
cArr.length=0
@@@@@@

→ String은 참조형 타입의 기본값인 null보다는 빈 문자열("")로, char형은 기본값인 '\u0000'보다는 공백(' ')으로 초기화 하는 것이 보통이다. 기본값을 null로 입력하게 된다면, NullPointerException이 발생할 수 있기 때문에  빈문자열로 초기화 하는 것이 좋다. 

 

 

- join()과 StringJoiner

: join()은 여러 문자열 사이에 구분자를 넣어서 결합한다. 

import java.util.StringJoiner;

class JavaJungsuk_StringJoiner_Ex9_9 {
    public static void main(String[] args) {
        String animals="dog, cat, bear";
        String[] arr=animals.spliet(",");
        
        System.out.println(String.join("-", arr));
        
        StringJoiner sj=new StringJoiner("/","[","]");
        
        for(String s : arr)
            sj.add(s);
            
        System.out.println(sj.toString());
    }
}

결과
dog-cat-bear
[dog/cat/bear]

 

 

- 문자열과 기본형 간의 변환

int i=100;
String str1=i+""; //편리
String str2=String.valueOf(i); //빠름

→ 숫자를 문자열로 변환.

 

int i  = Integer.parseInt("100"); //"100"을 100으로 변환하는 방법1
int i2 = Integer.valueOf("100");  //"100"을 100으로 변환하는 방법2

→ 문자열을 숫자로 변환.

 

class JavaJungsuk_String_Ex9_10 {
    public static void main(String[] args) {
        int iVal=100;
        String strVal=String.valueOf(iVal);
        
        double dVal=200.0;
        String strVal2=dVal+"";
        
        double sum=Integer.parseInt("+"+strVal)+Double.parseDouble(strVal2);
        double sum2=Integer.valueOf(strVal)+Double.valueOf(strVal2);
        
        System.out.println(String.join("",strVal,"+",strVal2,"=")+sum);
        System.out.println(strVal+"+"+strVal2+"="+sum2);
    }
}

결과
100+200.0=300.0
100+200.0=300.0

→ 위 예제에서 쓰인 parseInt나 parseDouble을 valueOf로 바꿔써도 똑같다.