Covenant


시작하며


문자열 배열을 하나의 문자열로 변환하려는 경우 자바에서는 .toString()을 이용하여 직접 변환할 수 없습니다.


String[] company = { "Apple", "Amazon", "Google", "Microsoft"};
System.out.println(company.toString());
[Ljava.lang.String;@9225652

요상하게 출력되는 값은 객체 타입과 해시값입니다. 하나의 문자열로 만드는 6가지 방법에 대해서 알아보겠습니다.



배열을 하나의 문자열(String)로 합치는 법


방법 1. String.join()

String.join()은 합친 문자열을 반환합니다. join()의 첫 번째 인자로 배열의 원소간 연결할 구분 문자, 두 번째 인자로 배열을 넣습니다.

String[] company = { "Apple", "Amazon", "Google", "Microsoft"};
String joinString = String.join(", ", company);

System.out.println(joinString);
Apple, Amazon, Google, Microsoft

join()의 첫 번째 인자인 구분문자를 생략할 수 있습니다. 생략하면 공백으로 배열의 원소를 연결합니다.

String joinString = String.join(" ","Apple", "Amazon", "Google", "Microsoft");

System.out.println(joinString);
Apple Amazon Google Microsoft

List 컬랙션이더라도 String.join을 같은 방법으로 사용할 수 있습니다.

List<String> company = List.of("Apple", "Amazon", "Google", "Microsoft");
String joinString = String.join("-", company);

System.out.println(joinString);
Apple-Amazon-Google-Microsoft



방법 2. Streams API


인텔리제이 IDE를 사용하신다면 String.join으로 변경을 제안해줍니다.

String[] company = {"Apple", "Amazon", "Google", "Microsoft"};
String str = Arrays.stream(company).collect(Collectors.joining(", "));

System.out.println(str);
Apple, Amazon, Google, Microsoft

stream을 이용하면 붙일 문자의 접두사, 접미사를 추가할 수 있습니다. Collectors.joining의 첫 번째 인자는 구분 문자, 두 번째 인자는 접두사, 세 번째 인자는 접미사입니다.

String[] company = {"Apple", "Amazon", "Google", "Microsoft"};
String str = Arrays.stream(company).collect(Collectors.joining(", ", "<", ">"));

System.out.println(str);
<Apple, Amazon, Google, Microsoft>



방법 3. Arrays.toString()


앞서 구분 문자를 지정할 수 있는 방법과 다르게 Arrays.toString은 모든 배열 요소를 ,로, 문자열의 시작과 끝에 대괄호([])가 붙습니다.

String[] company = {"Apple", "Amazon", "Google", "Microsoft"};
String str = Arrays.toString(company);

System.out.println(str);
[Apple, Amazon, Google, Microsoft]


문자열 뿐만 아니라 정수형, 실수형도 문자열로 변환해줍니다.

int[] number = {1, 2, 3, 4};
System.out.println(Arrays.toString(number));

double[] prices = {3.14, 4.0, 1.1};
System.out.println(Arrays.toString(prices));
[1, 2, 3, 4]
[3.14, 4.0, 1.1]



방법 4. StringJoiner


StringJoiner는 자바 8버전 이상부터 사용할 수 있습니다. StringJoiner 생성자에 구분문자를, 연결하려는 문자를 add메서드를 이용하여 문자를 생성할 수 있습니다.

String str = new StringJoiner("-")
        .add("Apple")
        .add("Amazon")
        .add("Google")
        .add("Microsoft")
        .toString();

System.out.println(str);
Apple-Amazon-Google-Microsoft



방법 5. StringBuilder.append()


전통적인 문자를 다루는 방법으로는 StringBuilder가 있습니다. 앞서 살펴본 편한 방법이 있기에 StringBuilder는 거의 사용하지 않습니다.

StringBuilder builder = new StringBuilder();
String[] company = {"Apple", "Amazon", "Google", "Microsoft"};
for (String name : company) {
    builder.append(name).append("-");
}
String str = builder.toString();
System.out.println(str);
Apple-Amazon-Google-Microsoft-

append로 구분자를 추가하는 방식이기에 맨 마지막 배열 원소인 Microsoft 다음에 구분자 -가 붙어있습니다.




방법 6. Apache Commons


문자를 다루는 편리한 라이브러리로
Apache Common Lang가 있습니다. StringUtils.join를 이용하여 배열 문자열을 문자열로 변환할 수 있습니다.

String[] company = {"Apple", "Amazon", "Google", "Microsoft"};
String str = StringUtils.join(company, "-");

System.out.println(company);
Apple-Amazon-Google-Microsoft



본 글을 작성하기 위해서 다음 링크를 참고하였습니다.