JAVA의 정석

String 클래스(2) - join()과 StringJoiner

499.token.required 2024. 2. 22. 19:04

 

1. join()과 StringJoiner클래스

 

join()은 여러 문자열 사이에 구분자를 넣어서 결합한다. 구분자로 문자열을 자르는 split()과 반대의 작업을 한다고 생각하면

 

이해하기 쉽다.

 

String animals = "dog,cat,bear";
String[] arr = animals.split(",") ; //문자열을 ','를 구분자로 나눠서 배열에 저장
String str = String.join("-", arr); // 배열의 문자열을 '-'로 구분해서 결합
System.out.println(str); // dog-cat-bear

 

 

java.utill.StringJoiner클래스를 사용해서 문자열을 결합할 수도 있는데 아래의 코드를 보는 것만으로도 이해가 될 것이다.

 

public class Ex9_9 {
    public static void main(String args[]){

        StringJoiner sj = new StringJoiner("," , "[" , "]");
        String [] strArr = {"aaa", "bbb", "ccc" };

        for(String s : strArr)
            sj.add(s.toUpperCase());

        System.out.println(sj.toString()); // [AAA,BBB,CCC}

    }
}

 

 

public static void main(String args[]){

        StringJoiner sj = new StringJoiner(",1" , "[@" , "#]");
        String [] strArr = {"aaa", "bbb", "ccc" };

        for(String s : strArr)
            sj.add(s.toUpperCase());

        System.out.println(sj.toString()); // [@AAA,1BBB,1CCC#}

    }
}

 

 

public StringJoiner(CharSequence delimiter,
                    CharSequence prefix,
                    CharSequence suffix) {
    Objects.requireNonNull(prefix, "The prefix must not be null");
    Objects.requireNonNull(delimiter, "The delimiter must not be null");
    Objects.requireNonNull(suffix, "The suffix must not be null");
    // make defensive copies of arguments
    this.prefix = prefix.toString();
    this.delimiter = delimiter.toString();
    this.suffix = suffix.toString();
    checkAddLength(0, 0);
}

 

 

파라미터는 delimiter, prefix, suffix 순으로 입력받기 때문에 결과는 위 예제와 같다.

 

 

 

2. 문자열과 기본형 간의 변환

 

숫자로 이루어진 문자열을 숫자로 또는 그 반대로 변환하는 경우가 자주 있다. 숫자에 빈 문자열 ""을 더해주기만 하면 된다.

 

이 외에도 valueOf()을 사용하는 방법도 있다. 

 

int i = 100;
String str1 = i + ""; // 100을 "100"으로 변환하는 방법1
String str2 = String.valueOf(i); // 100을 "100"으로 변환하는 방법2

 

 

반대로 String을 정수형으로 변환하는 방법도 간다하다. valueOf() 나 parseInt()를 스는 방법이 있다.

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

 

 

원래 valueOf()의 반환타입은 int가 아니라 Integer이지만 오토박싱에 의해 Integer가 int로 자동변환된다.

 

기본형 -> 문자열 문자열 -> 기본형
String String.valueOf(boolean b)
String String.valueOf(char c)
String String.valueOf(int i)
String String.valueOf(long l)
String String.valueOf(float f)
String String.valueOf(double d)
boolean Boolean.valueOf(String s)
byte Byte.valueOf(String s)
short Short.valueOf(String s)
int Integer.valueOf(String s)
long Long.valueOf(String s)
float Float.valueOf(String s)
double Double.valueOf(String s)

 

 

3. 문자열과 기본형 간의 변환 예제

 

 

이 예제는 문자열과 기본형간의 예를 보여준다. parseInt()나 parseFloat()과 같은 메서드는 문자열에 공백 또는 문자가 포함되어

 

있는 경우 변환 시 예외 (NumberFormatException)가 발생할 수 있으므로 주의해야 한다. 그래서 문자열 양끝의 공백을

 

제거해주는 trim()을 습관적으로 같이 사용하기도 한다.

 

int val = Integer.valueOf(" 123 ".trim()); // 문자열 양 끝의 공백을 제거한 후 변환

 

그러나 부호를 의미하는 '+' 나 소수점을 의미하는 ','와 float형 값을 뜻하는 f와 같은 자료형 접미사는 허용된다.

 

단, 자료형에 알맞은 변환을 하는 경우에만 허용된다.

 

만일 '1.0f'를 int형 변환 메서드인 Integer.valueOf(String s)를 사용해서 변환하려하면 예외가 발생하지만 

 

Float.valueOf(String s)를 사용하면 아무런 문제가 없다.

 

이처럼 문자열을 숫자로 변환하는 과정에서는 예외가 발생하기 쉽기 때문에 주의를 기울여야하고 , 예외가 발생했을 때의 처리를

 

적절히 해주어야 한다.