StringBuilder 또는 StringBuffer 를 사용하다보면 중간 중간에 공백(문자)을 넣어야하는 경우에는 귀찮고 가독성도 떨어지는 면이 있습니다. 혹시나 하고 봤더니 Java 8 에 추가된 StringJoiner 라는 클래스가 있더라구요. 쓸만한 것 같아서 소개드립니다.
StringJoiner 는 여러 문자들을 연결할 때 붙일 구분자(delimiter ) 를 지정해줄 수 있는게 특징입니다.
간단한 예제
1 2 3 4 5 String first = "관우" ;String second = "장비" ;String third = "조운" ;String fourth = "황충" ;String fifth = "마초" ;
오호대장군 다섯 명이 있다고 할 때, 다섯 명 이름을 “-” 로 붙여서 출력해보도록 합니다.
String + operator
1 2 String 오호대장군 = first + "-" + "second" + "-" + third + "-" + fourth + "-" + fifth; System.out.println(오호대장군);
StringBuffer / StringBuilder
1 2 3 4 5 6 7 8 9 10 11 12 13 14 StringBuffer sb = new StringBuffer ();sb.append(first); sb.append("-" ); sb.append(second); sb.append("-" ); sb.append(third); sb.append("-" ); sb.append(fourth); sb.append("-" ); sb.append(fifth); sb.append("-" ); String 오호대장군 = sb.toString(); System.out.println(오호대장군);
StringJoiner
1 2 3 4 5 6 7 8 9 10 StringJoiner sj = new StringJoiner ("-" );sj.add(first); sj.add(second); sj.add(third); sj.add(fourth); sj.add(fifth); String 오호대장군 = sj.toString(); System.out.println(오호대장군);
자동으로 구분자를 사이사이에 붙여주기 때문에 코드가 훨씬 줄었습니다. 그리고 prefix 와 suffix 도 붙여줄 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 StringJoiner sj = new StringJoiner ("-" , "[" , "]" );sj.add(first); sj.add(second); sj.add(third); sj.add(fourth); sj.add(fifth); String 오호대장군 = sj.toString(); System.out.println(오호대장군);
StringJoiner 은 stream 을 이용해서 쉽게 사용할 수 있습니다.
1 2 3 4 List<String> 장군들 = Arrays.asList(first, second, third, fourth, fifth); String 오호대장군 = 장군들.stream().collect(Collectors.joining("-" , "[" , "]" )); System.out.println(오호대장군);
이처럼 StringJoiner 는 공백이나 구분자를 반복해서 붙여야하는 경우에 유용하게 사용하실 수 있습니다.