Java에서 분리 자로 원시 배열 결합

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 구분 기호를 모두 포함했습니다 .

결합 연산의 결과 에는 int 배열의 경우 “1-2-3-4-5-6-7-8-9” , char 배열의 경우 “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

Apache Commons Lang 라이브러리는 기본 배열을 결합하는 데 사용할 수 있는 StringUtilsArrayUtils 클래스 에 몇 가지 편리한 메서드를 제공 합니다.

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

 org.apache.commons commons-lang3 3.8.1 

문자열 구분자로 작업 할 때 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 클래스를 제공합니다 . 프로젝트에서 Guava를 사용하려면 guava Maven 종속성 을 추가해야합니다 .

 com.google.guava guava 27.0.1-jre 

Joiner 클래스를 사용하여 int 배열을 조인합시다 .

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

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

Guava는 문자 배열을 문자 목록 으로 변환하는 유사한 방법을 제공합니다 . 결과적으로 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에서 사용할 수 있습니다.