자바 8 문자열 연결 개선 자세

요소 1,요소 2,요소 3,요소 N 의 문자열 형식 으로 포맷 하 는 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(StringCharSequence 의 하위 클래스)일 수 있다.그래서 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 를 제공 하여 인 코딩 을 어느 정도 편리 하 게 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기