개발/Java

[Java] 자바 배열 원소를 이어 붙여서 출력하는 4가지 방법

선우. 2024. 5. 31. 22:00

개요

출력 예시

 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를 넘겨줍니다.

 

Collectors.joining

배열 원소들을 이어 붙일 때, 구분자의 유무, 접두사 접미사의 유무에 따라 위 세가지 메서드 중 하나를 택하면 됩니다.

 

4. String.join

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 메서드 내부 구현
join(prefix, suffix, delimiter, elements, size)

join(delimiter, elements) 메서드는 내부적으로 join을 다시 호출하는데, 위 join 메서드는 public 하지 않아서 외부에서 호출할 수 없습니다. 즉, 개발자가 호출할 일이 없습니다.

 

Reference