1. 소개

이 빠른 사용방법(예제)에서는 Java에서 단일 문자 구분 기호를 사용하여 기본 요소 배열결합하는 방법을 배웁니다 . 예제에서는 두 개의 배열, 즉 int  배열과 char 배열을 고려할 것 입니다.

2. 문제 정의

 예제를 위해 int  배열과  char 배열을 정의  하고 내용을 결합하는 데 사용할 구분 문자를 정의 해 보겠습니다.

int[] intArray = {1, 2, 3, 4, 5, 6, 7, 8, 9};
char[] charArray = {'a', 'b', 'c', 'd', 'e', 'f'};
char separatorChar = '-';
String separator = String.valueOf(separatorChar);

일부 메서드에는 char 인수가 필요하고 다른 메서드 에는 String 인수가 필요하므로 charString 구분 기호를 모두 포함했습니다 .

접합 작업의 결과를 포함한다 "1-2-3-4-5-6-7-8-9" 대해 INT의 어레이, 및 "ABCDEF" 어레이.

3. Collectors.joining ()

Java 8 Stream API 인 Collectors.joining () 에서 사용 가능한 메서드 중 하나부터 시작하겠습니다 .

먼저 java.util 패키지  에있는 Arrays.stream () 메서드를  사용하여 기본 배열에서 Stream 을  만듭니다 . 다음으로 각 요소를 String에 매핑합니다 . 마지막으로 주어진 구분 기호로 요소를 연결합니다.

int 배열부터 시작하겠습니다  .

String joined = Arrays.stream(intArray)
  .mapToObj(String::valueOf)
  .collect(Collectors.joining(separator));

 이 메서드로 char 배열을 결합 할 때  먼저 char 배열을 CharBuffer래핑  한 다음 다시 char에 투영해야 합니다. 이는 chars () 메서드가 int  값 Stream반환  하기 때문  입니다.

불행하게도, 자바 스트림 API는 포장을위한 기본 방법을 제공하지 않습니다  스트림문자를 .

char 배열을 결합 해 보겠습니다 .

String joined = CharBuffer.wrap(charArray).chars()
  .mapToObj(intValue -> String.valueOf((char) intValue))
  .collect(Collectors.joining(separator));

4. StringJoiner

Collectors.joining ()유사 하게이 접근 방식은 Stream API를 사용하지만 요소를 수집하는 대신 요소를 반복하여 StringJoiner 인스턴스에 추가합니다  .

StringJoiner intStringJoiner = new StringJoiner(separator);
Arrays.stream(intArray)
  .mapToObj(String::valueOf)
  .forEach(intStringJoiner::add);
String joined = intStringJoiner.toString();

다시 말하지만, Stream API를 사용할 때 char 배열을 CharBuffer 로 래핑해야합니다  .

StringJoiner charStringJoiner = new StringJoiner(separator);
CharBuffer.wrap(charArray).chars()
  .mapToObj(intChar -> String.valueOf((char) intChar))
  .forEach(charStringJoiner::add);
String joined = charStringJoiner.toString();

5. Apache Commons Lang

아파치 코 몬즈 랭 라이브러리는 몇 가지 편리한 방법을 제공합니다  StringUtils에ArrayUtils의 우리가 우리의 원시적 배열에 가입하는 데 사용할 수있는 클래스를.

이 라이브러리를 사용하려면 pom.xml에 commons-lang3 의존성  을 추가해야합니다 .

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.11</version>
</dependency>

문자열 구분자로 작업 할 때 StringUtilsArrayUtils 를 모두 사용 합니다.

이것들을 함께 사용하여 int 배열 을 결합 해 보겠습니다 .

String joined = StringUtils.join(ArrayUtils.toObject(intArray), separator);

또는 기본 문자 유형을 구분 기호로 사용하는 경우 간단히 다음과 같이 작성할 수 있습니다.

String joined = StringUtils.join(intArray, separatorChar);

char 배열 을 결합하는 구현  은 매우 유사합니다.

String joined = StringUtils.join(ArrayUtils.toObject(charArray), separator);

그리고 문자 구분자를 사용할 때 :

String joined = StringUtils.join(charArray, separatorChar);

6. 구아바

Google의 Guava 라이브러리는 배열을 결합하는 데 사용할 수 있는 Joiner 클래스를 제공합니다 . 우리의 프로젝트에 구아바를 사용하기 위해, 우리는 추가해야합니다 구아바 메이븐 의존성을 :

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>27.0.1-jre</version>
</dependency>

Joiner 클래스를 사용하여 int 배열을 결합 해 보겠습니다  .

String joined = Joiner.on(separator).join(Ints.asList(intArray));

이 예제에서 우리는 또한 Guava Ints.asList () 메서드를 사용  했는데 , 이것은 프리미티브 배열을 List of Integer 로 멋지게 변환합니다 .

Guava는 문자 배열을 문자 List 으로 변환하는 유사한 방법을 제공합니다  . 결과적으로 char 배열을 결합 하는 것은 int 배열 을 사용한 위의 예와 매우 유사합니다 .

String joined = Joiner.on(separator).join(Chars.asList(charArray));

7. StringBuilder

마지막으로 Java 8 또는 타사 라이브러리를 사용할 수없는 경우 StringBuilder 로 요소 배열을 수동으로 결합 할 수 있습니다 . 이 경우 구현은 두 유형의 배열에 대해 동일합니다.

if (array.length == 0) {
    return "";
}
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < array.length - 1; i++) {
    stringBuilder.append(array[i]);
    stringBuilder.append(separator);
}
stringBuilder.append(array[array.length - 1]);
String joined = stringBuilder.toString();

8. 결론

이 빠른 문서에서는 지정된 구분 문자 또는 문자열로 기본 요소 배열을 결합하는 여러 방법을 설명합니다. 네이티브 JDK 솔루션을 사용한 예제와 두 개의 타사 라이브러리 (Apache Commons Lang 및 Guava)를 사용한 추가 솔루션을 보여주었습니다.

항상 그렇듯이이 기사에 사용 된 전체 코드는 GitHub에서 사용할 수 있습니다 .