여러 문자열을 이어 붙일 때 보통 StringBuilder를 사용했었습니다.
그런데 특정 상황에서 더 유용한 클래스가 있어서 소개하려 합니다.
StringBuilder를 썼을 때 아쉬운 점
아래와 같이 반복문으로 문자열을 이어 붙일 때 마지막에 구분자가 append 되는 것을 처리해야 하는 문제가 있다.
String[] arr = {"one", "two", "three"};
StringBuilder sb = new StringBuilder();
for(int i = 0; i < arr.length; i++){
if(i == arr.length - 1){
sb.append(arr[i]);
break;
}
sb.append(arr[i]).append(",");
}
System.out.println(sb);
String.join() 또는 StringJoiner을 이용하면 조금 더 간편하게 문자열을 이어 붙일 수 있다.
String.join() 사용 시
String[] arr = {"one", "two", "three"};
String join = String.join(",", arr);
System.out.println(join);
StringJoiner 사용 시
String[] arr = {"one", "two", "three"};
StringJoiner sj = new StringJoiner(",");
for (String str : arr) {
sj.add(str);
}
System.out.println(sj);
String.join()
이 메서드는 String 배열 또는 String 타입의 Iterable을 상속한 클래스 객체를 이어붙일 수 있는 메서드이다.
매개변수에 구분자(delimiter)와 배열, Iterable을 넣어준다.
String.join(CharSequence delimiter, CharSequence... elements);
String.join(CharSequence delimiter, Iterable<? extends CharSequence> elements);
예제
String[] arr = {"one", "two", "three"};
List<String> list = new ArrayList<>(List.of(arr));
String joinArray = String.join(", ", arr);
String joinIterable = String.join("|", list);
System.out.println(joinArray);
System.out.println(joinIterable);
위와 같이 delimiter로 이어 붙인 문자열이 반환된다.
String.join() 메서드는 내부적으로 StringJoiner를 사용하여 구현되어 있다.
StringJoiner
StringBuilder와 유사하지만, 마지막에 delimiter가 추가되는 것을 처리하지 않아도 된다.
생성자
구분자(delimiter)만 제공해도 되고, prefix와 suffix을 지정할 수도 있다.
public StringJoiner(CharSequence delimiter);
public StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix);
객체 생성, StringJoiner.add()
ex1) delimiter만 지정
StringJoiner sj = new StringJoiner(", ");
sj.add("one");
sj.add("two");
sj.add("three");
System.out.println(sj);
[출력]
one, two, three
ex2) prefix, suffix 지정
StringJoiner sj = new StringJoiner(", ", "[","]");
sj.add("one");
sj.add("two");
sj.add("three");
System.out.println(sj);
[출력]
[one, two, three]
기본적인 add 메서드 이외에 두 개의 StringJoiner를 합치는 merge 메서드도 있다.
StringJoiner.merge()
StringJoiner sj = new StringJoiner(", ", "[", "]");
sj.add("one");
sj.add("two");
sj.add("three");
StringJoiner sj2 = new StringJoiner(" ");
sj2.add("four");
sj2.add("five");
sj.merge(sj2);
System.out.println(sj);
[출력]
[one, two, three, four five]
반응형
'JAVA & Spring > Java Library' 카테고리의 다른 글
[JUnit] 테스트 코드 작성과 단위테스트 Unit Test (3) | 2023.10.05 |
---|---|
[Java / Spring] Lombok 롬복 (0) | 2023.05.04 |
[Spring] 로깅 logging (@Slf4j) (0) | 2023.04.21 |