Java StringJoiner (문자열 구분자 붙이기)

🗓 ⏱ 소요시간 2 분

StringBuilder 또는 StringBuffer 를 사용하다보면 중간 중간에 공백(문자)을 넣어야하는 경우에는 귀찮고 가독성도 떨어지는 면이 있습니다. 혹시나 하고 봤더니 Java 8 에 추가된 StringJoiner 라는 클래스가 있더라구요. 쓸만한 것 같아서 소개드립니다.

StringJoiner 는 여러 문자들을 연결할 때 붙일 구분자(delimiter) 를 지정해줄 수 있는게 특징입니다.

간단한 예제

1
2
3
4
5
String first = "관우";
String second = "장비";
String third = "조운";
String fourth = "황충";
String fifth = "마초";

오호대장군 다섯 명이 있다고 할 때, 다섯 명 이름을 “-” 로 붙여서 출력해보도록 합니다.

1
관우-장비-조운-황충-마초

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
// public StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
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(오호대장군);
1
[관우-장비-조운-황충-마초]

StringJoiner 은 stream 을 이용해서 쉽게 사용할 수 있습니다.

1
2
3
4
List<String> 장군들 = Arrays.asList(first, second, third, fourth, fifth);

String 오호대장군 = 장군들.stream().collect(Collectors.joining("-", "[", "]"));
System.out.println(오호대장군);

이처럼 StringJoiner 는 공백이나 구분자를 반복해서 붙여야하는 경우에 유용하게 사용하실 수 있습니다.