개요
BOJ와 같은 알고리즘 문제 풀이를 하다 보면 위와 같이 일정한 패턴에 맞춰 배열 원소들을 출력해야 할 때가 있습니다. 자바에서 배열에 담긴 원소들을 형태에 맞춰 출력하는 방법 4가지를 알아보겠습니다.
1. for 문 + StringBuilder
String[] arr = {"a", "b", "c", "d", "e"};
StringBuilder sb = new StringBuilder();
for(String str : arr)
sb.append(str).append(", ");
System.out.println(sb);
a, b, c, d, e,
각 배열 원소를 순회하며 StringBuilder의 append를 호출해 합칠 수 있습니다. 각 원소 사이 구분자가 필요할 경우, append(구분자)를 한번 더 호출하면 됩니다.
하지만 위 결과처럼 마지막 원소에도 ", " 구분자가 붙게 됩니다. 따라서 아래와 같이 구분자를 제거하기 위한 별도 처리를 해야 합니다.
String[] arr = {"a", "b", "c", "d", "e"};
StringBuilder sb = new StringBuilder();
for(int i=0; i<arr.length; i++) {
sb.append(arr[i]);
if (i != arr.length - 1) // 마지막 원소가 아닐 때만 ", " 구분자를 추가
sb.append(", ");
}
System.out.println(sb);
a, b, c, d, e
2. for 문 + StringJoiner
StringBuilder를 사용할 때 불편했던 접두사, 접미사 처리는 StringJoiner를 사용하면 편리합니다.
String[] arr = {"a", "b", "c", "d", "e"};
StringJoiner sj = new StringJoiner(", ", "<", ">");
for(String str : arr)
sj.add(str);
System.out.println(sj);
<a, b, c, d, e>
StringJoiner의 생성자 매개변수에 delimiter, prefix, suffix 순으로 작성하고 add 메서드로 배열 원소들을 더해주면 됩니다. 별도로 처리할 것 없이 사용하면 되어 편리합니다.
3. stream + Collectors.joining
String[] arr = {"a", "b", "c", "d", "e"};
String str = Arrays.stream(arr).collect(Collectors.joining(", ", "<", ">"));
System.out.println(str);
<a, b, c, d, e>
배열을 스트림화 한 후, collect 연산으로 Collectors.joining을 호출해 delimiter, prefix, suffix를 넘겨줍니다.
배열 원소들을 이어 붙일 때, 구분자의 유무, 접두사 접미사의 유무에 따라 위 세가지 메서드 중 하나를 택하면 됩니다.
4. String.join
String 클래스는 public static한 join 메서드를 제공합니다. 메서드 인자는 다음과 같습니다.
- delimiter: 각 원소들을 구분할 문자입니다.
- elements: CharSequence... 가변인자 또는 Iterable<? extends CharSequence> 인터페이스를 구현한 자료구조를 전달합니다.
String[] alphabetArray = {"a", "b", "c", "d", "e"};
List<String> alphabetList = List.of("a", "b", "c", "d", "e");
String arrayStr = String.join(", ", alphabetArray);
String listStr = String.join(", ", alphabetList);
System.out.println("arrayStr: " + arrayStr);
System.out.println("listStr: " + listStr);
arrayStr: a, b, c, d, e
listStr: a, b, c, d, e
join(delimiter, elements) 메서드는 내부적으로 join을 다시 호출하는데, 위 join 메서드는 public 하지 않아서 외부에서 호출할 수 없습니다. 즉, 개발자가 호출할 일이 없습니다.
Reference
'개발 > Java' 카테고리의 다른 글
[Java] 자바 입출력 - 바이트 스트림과 문자 스트림이란? (0) | 2024.06.25 |
---|---|
[Java] 익명 클래스, 익명 객체란? (0) | 2024.06.18 |
[Java] Map을 순회하는 3가지 방법 (0) | 2024.05.28 |
[Java] 자바 Optional 올바른 사용법 (0) | 2024.05.23 |
[Java] 자바 String 문자열, char 문자를 int 정수로 변환하기 (0) | 2024.05.21 |