자바 8 문자열 연결 개선 자세
List<String>
이 필요 합 니 다.의심 할 여지 가 없다.
Java8
이전에 우리 의 첫 번 째 반응 은 StringBuilder
을 사용 한 것 이다.
public static String formatList(List<String> list, String delimiter) {
StringBuilder result = new StringBuilder();
for (String str : list) {
result.append(str).append(delimiter);
}
// delimiter
result.delete(result.length() - delimiter.length(), result.length());
return result.toString();
}
public static void main(String[] args) throws Exception {
List<String> list = Arrays.asList("a", "b", "c", "d", "e", "f", "g");
System.out.println(" StringBuilder:");
String format = formatList(list, ", ");
System.out.println(format);
}
운행 결과:JDK 1.8 에 문자열 연결 에 사용 할 새로운 클래스 를 추 가 했 습 니 다.구분자 가 필요 한 경우 에 만 사 용 됩 니 다.바로
StringJoiner
입 니 다.StringJoiner
구조 시 구분자(delimiter)를 지정 한 다음 에 하나의 요 소 를 연결 할 때마다 delimiter
을 추가 하고 StringJoiner
을 사용 하여 formatList
을 바 꿀 수 있 습 니 다.
public static String formatList(List<String> list, String delimiter) {
StringJoiner result = new StringJoiner(delimiter);
for (String str : list) {
result.add(str);
}
return result.toString();
}
public static void main(String[] args) throws Exception {
List<String> list = Arrays.asList("a", "b", "c", "d", "e", "f", "g");
System.out.println(" StringJoiner:");
String format = formatList(list, ", ");
System.out.println(format);
}
실행 결과:formatList
의 코드 는 더욱 간결 해 졌 다―물론 우 리 는 더욱 간결 해 질 수 있다―JDK 1.8 은 String
류 에 새로운 정적 방법 을 추가 했다.String.join
:이 를 통 해 알 수 있 듯 이 첫 번 째 매개 변 수 는 하나의 구분자
delimiter
이 고 두 번 째 매개 변 수 는 Iterable
또는 길 어 지 는 매개 변수의 CharSequence
(String
은 CharSequence
의 하위 클래스)일 수 있다.그래서 formatList
방법 은 코드 한 마디 만 있 으 면 됩 니 다.
public static String formatList(List<String> list, String delimiter) {
return String.join(delimiter, list);
}
물론 String.join
방법의 기능 내 부 는 StringJoiner
을 통 해 이 루어 진 것 으로 추정 된다.String.join (CharSequence, Iterable)
의 소스 코드:그러나 우 리 는
String.join
방법의 부족 함 을 보 았 다.접두사 와 접 두 사 를 지정 할 수 없다.예 를 들 어 우리 가 List<String>
을{원소 1,원소 2,원소 3,원소 N}으로 직접 포맷 하려 면?이 때 접 두 사 는 "{ "
,접 두 사 는 " }"
)StringJoiner
의 구조 방법 을 살 펴 보면 StringJoiner
은 구분자 의 구조 방법 을 지정 하 는 것 외 에 구분자,접두사 와 접 두 사 를 지정 할 수 있 는 구조 방법 도 있 음 을 발견 했다.수정
formatList
:
public static String formatList(
List<String> list, String delimiter, String prefix, String suffix) {
StringJoiner result = new StringJoiner(delimiter, prefix, suffix);
for (String str : list) {
result.add(str);
}
return result.toString();
}
public static void main(String[] args) throws Exception {
List<String> list = Arrays.asList("a", "b", "c", "d", "e", "f", "g");
System.out.println(" StringJoiner, :");
String format = formatList(list, ", ", "{ ", " }");
System.out.println(format);
}
실행 결과:좋 습 니 다.그런데 좀 더 깔끔 하지 않 을까요?사실상
Java8
은 문자열 집합 연결 작업 에 대해 전문 적 인 흐름 식 API,즉 Collectors.joining
을 제공 했다.함수:!
연결 문자 가 존재 하지 않 는 joining()방법(바 텀 은 StringBuilder 로 구현);
joining(CharSequence delimiter)방법,즉 구분자 가 delimiter(바 텀 은 StringJoiner)입 니 다.j
oining(CharSequence delimiter,CharSequence prefix,CharSequence suffix)방법,즉 구분자 가 delimiter 이 고 접 두 사 는 prefix 이 며 접 두 사 는 suffix(바 텀 은 StringJoiner)입 니 다.
그럼 어떻게 쓰 지?우 리 는 세 개의 매개 변 수 를 직접 사용 하 는 Collectors.joining 방법 으로 formatList 를 바 꿉 니 다.
public static String formatList(
List<String> list, String delimiter, String prefix, String suffix) {
return list.stream().collect(Collectors.joining(delimiter, prefix, suffix));
}
public static void main(String[] args) throws Exception {
List<String> list = Arrays.asList("a", "b", "c", "d", "e", "f", "g");
System.out.println(" Collectors.joining:");
String format = formatList(list, ", ", "{ ", " }");
System.out.println(format);
}
실행 결과:StringJoiner 의 소스 코드 를 보면 StringJoiner 의 바 텀 구현 이 바로 StringBuilder-자바 8 이 구분자 로 여러 문자열 을 연결 하 는 기능 을 패키지 하 는 것 을 알 수 있 습 니 다.이렇게 사용 하기 쉽 고 간단 한 API 를 제공 하여 인 코딩 을 어느 정도 편리 하 게 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 8 새 기능 내장 함수식 인터페이스 상세 정보Java 8 새로운 기능 내장 함수식 인터페이스 이전의 블로그 람다 표현식에서 자바 8이 제공하는 함수식 인터페이스를 언급한 적이 있다.이 글에서 자바 8의 가장 기본적인 함수식 인터페이스를 소개할 것이다 방법의 인...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.