Java에서 문자열 사이에 특정한 기호로 연결시키고 싶을 경우가 간혹 생긴다. 보통이라면 for
루프를 통해서 간단하게 만들 수 있을 것이다.
{"아이언맨", "캡틴아메리카", "블랙위도우", "헐크", "토르", "호크아이"}
와 같은 배열이 있다고 생각하자 이들을 -
로 연결하겠다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class StringJoinerExample { public void ex1 () { final String DELIMITER = "-" ; StringBuilder result = new StringBuilder (); String[] strArr = {"아이언맨" , "캡틴아메리카" , "블랙위도우" , "헐크" , "토르" , "호크아이" }; for (int i = 0 ; i < strArr.length; i++) { result.append(strArr[i]); if (i < strArr.length - 1 ) { result.append(DELIMITER); } } System.out.println(result.toString()); } }
문제 없이 실행되는 소스코드이지만 뭔가 더 간결하게 하고 싶은 욕심이 생긴다. StringJoiner
를 사용하면 이를 좀 더 깔끔하게 작성이 가능하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import java.util.StringJoiner;public class StringJoinerExample { public void ex2 () { StringJoiner joiner = new StringJoiner ("-" ); String[] strArr = {"아이언맨" , "캡틴아메리카" , "블랙위도우" , "헐크" , "토르" , "호크아이" }; for (int i = 0 ; i < strArr.length; i++) { joiner.add(strArr[i]); } System.out.println(joiner.toString()); } }
StringJoiner
는 문자열 생성자에서 선언한 구분자를 add
시켜주면서 StringBuilder
와 유사한 효과를 낸다. 차이점이 있다면 prefix(접두사)
와 suffix(접미사)
까지 선언이 가능하다는 점이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import java.util.StringJoiner;public class StringJoinerExample { public void ex3 () { StringJoiner joiner = new StringJoiner ("-" , "[ " , " ]" ); String[] strArr = {"아이언맨" , "캡틴아메리카" , "블랙위도우" , "헐크" , "토르" , "호크아이" }; for (int i = 0 ; i < strArr.length; i++) { joiner.add(strArr[i]); } System.out.println("AVENGERS" ); System.out.println(joiner.toString()); } }
StringJoiner
는 이번에 암호화폐 거래소 open api를 사용하면서 알게된 클래스이다. ETH-BTC, SNT-BTC처럼 적게는 몇 개, 많게는 백 개가 넘는 마켓코드를 ,
를 통해 쉽게 이어 붙이는 방법을 찾다가 발견하게 된 것이다. 앞으로도 유용하게 쓰일 것 같다.
마지막으로 StringJoiner
를 활용하여 배열을 json
형태로 만드는 예제를 살펴보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 import java.util.StringJoiner;public class StringJoinerExample { public void ex4 () { StringJoiner jsonJoiner = new StringJoiner (",\n\t" , "{\n\t" , "\n}" ); String[] strArr = {"아이언맨" , "캡틴아메리카" , "블랙위도우" , "헐크" , "토르" , "호크아이" }; for (int i = 0 ; i < strArr.length; i++) { StringJoiner keyJoiner = new StringJoiner ("" , "\"" , "\"" ); StringJoiner valueJoiner = new StringJoiner ("" , "\"" , "\"" ); StringJoiner keyValueJoiner = new StringJoiner (" : " ); keyJoiner.add("hero" + i); valueJoiner.add(strArr[i]); keyValueJoiner.add(keyJoiner.toString()); keyValueJoiner.add(valueJoiner.toString()); jsonJoiner.add(keyValueJoiner.toString()); } System.out.println("AVENGERS JSON RESULT" ); System.out.println(jsonJoiner.toString()); } }
StringBuilder
, 또는 기타 문자열을 생성하는 클래스와 잘 조합해서 쓴다면 다양한 방면으로 문자열을 만들어 볼 수 있을 것 같다.