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 인수가 필요하므로 char 및 String 구분 기호를 모두 포함했습니다 .
접합 작업의 결과를 포함한다 "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>
문자열 구분자로 작업 할 때 StringUtils 및 ArrayUtils 를 모두 사용 합니다.
이것들을 함께 사용하여 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)를 사용한 추가 솔루션을 보여주었습니다.
- https://docs.spring.io/spring-framework/docs/current/reference/html
- https://www.baeldung.com/java-join-primitive-array
'Java' 카테고리의 다른 글
Java에서 날짜 증가 (0) | 2021.03.26 |
---|---|
Java에서 경과 시간 측정 (0) | 2021.03.26 |
Apache Commons Lang 3을 사용한 문자열 처리 (0) | 2021.03.25 |
Spring MVC 컨트롤러에서 일반 HTML 반환 (0) | 2021.03.25 |
Java에서 파일 내용 삭제 (0) | 2021.03.25 |