Java

[Java] 문자열 붙이기 - StringJoiner와 String.join() 알아보기

2024. 3. 17. 00:30
목차
  1. StringBuilder를 썼을 때 아쉬운 점
  2. String.join()
  3. StringJoiner
  4. 생성자
  5. 객체 생성, StringJoiner.add()
  6. StringJoiner.merge()
여러 문자열을 이어 붙일 때 보통 StringBuilder를 사용했었습니다.
그런데 특정 상황에서 더 유용한 클래스가 있어서 소개하려 합니다.

StringBuilder를 썼을 때 아쉬운 점


아래와 같이 반복문으로 문자열을 이어 붙일 때 마지막에 구분자가 append 되는 것을 처리해야 하는 문제가 있다.

String[] arr = {"one", "two", "three"};
StringBuilder sb = new StringBuilder();

for(int i = 0; i < arr.length; i++){
    if(i == arr.length - 1){
        sb.append(arr[i]);
        break;
    }
    sb.append(arr[i]).append(",");
}

System.out.println(sb);

String.join() 또는 StringJoiner을 이용하면 조금 더 간편하게 문자열을 이어 붙일 수 있다.

String.join() 사용 시

String[] arr = {"one", "two", "three"};
String join = String.join(",", arr);
System.out.println(join);

StringJoiner 사용 시

String[] arr = {"one", "two", "three"};
StringJoiner sj = new StringJoiner(",");
for (String str : arr) {
    sj.add(str);
}
System.out.println(sj);

String.join()


이 메서드는 String 배열 또는 String 타입의 Iterable을 상속한 클래스 객체를 이어붙일 수 있는 메서드이다.

 

매개변수에 구분자(delimiter)와 배열, Iterable을 넣어준다.

String.join(CharSequence delimiter, CharSequence... elements);
String.join(CharSequence delimiter, Iterable<? extends CharSequence> elements);

예제

String[] arr = {"one", "two", "three"};
List<String> list = new ArrayList<>(List.of(arr));

String joinArray = String.join(", ", arr);
String joinIterable = String.join("|", list);

System.out.println(joinArray);
System.out.println(joinIterable);

[출력]

위와 같이 delimiter로 이어 붙인 문자열이 반환된다.

 

String.join() 메서드는 내부적으로 StringJoiner를 사용하여 구현되어 있다.

 


StringJoiner


StringBuilder와 유사하지만, 마지막에 delimiter가 추가되는 것을 처리하지 않아도 된다.

 

생성자

구분자(delimiter)만 제공해도 되고, prefix와 suffix을 지정할 수도 있다.

public StringJoiner(CharSequence delimiter);
public StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix);

객체 생성, StringJoiner.add()

ex1) delimiter만 지정

StringJoiner sj = new StringJoiner(", ");
sj.add("one");
sj.add("two");
sj.add("three");

System.out.println(sj);

[출력]

one, two, three

ex2) prefix, suffix 지정

StringJoiner sj = new StringJoiner(", ", "[","]");
sj.add("one");
sj.add("two");
sj.add("three");

System.out.println(sj);

[출력]

[one, two, three]

 

기본적인 add 메서드 이외에 두 개의 StringJoiner를 합치는 merge 메서드도 있다.

 


StringJoiner.merge()

StringJoiner sj = new StringJoiner(", ", "[", "]");
sj.add("one");
sj.add("two");
sj.add("three");

StringJoiner sj2 = new StringJoiner(" ");
sj2.add("four");
sj2.add("five");
sj.merge(sj2);

System.out.println(sj);

[출력]

[one, two, three, four five]
반응형
저작자표시 (새창열림)

'Java' 카테고리의 다른 글

[Java] JAVA_HOME 자바 환경변수 설정  (0) 2024.10.15
[Java] 소켓 프로그래밍(Socket Programming) 예제 / ServerSocket, Socket, Thread 프로그래밍  (0) 2024.08.09
[Java] 깊은 복사(Deep Copy) vs 얕은 복사(Shallow Copy)  (0) 2024.03.16
[Java] equals()와 hashCode() / equals와 hashCode를 둘 다 재정의 해야하는 이유  (0) 2024.03.14
[Java / CS] JVM과 Java의 메모리 구조  (0) 2024.02.16
  1. StringBuilder를 썼을 때 아쉬운 점
  2. String.join()
  3. StringJoiner
  4. 생성자
  5. 객체 생성, StringJoiner.add()
  6. StringJoiner.merge()
'Java' 카테고리의 다른 글
  • [Java] JAVA_HOME 자바 환경변수 설정
  • [Java] 소켓 프로그래밍(Socket Programming) 예제 / ServerSocket, Socket, Thread 프로그래밍
  • [Java] 깊은 복사(Deep Copy) vs 얕은 복사(Shallow Copy)
  • [Java] equals()와 hashCode() / equals와 hashCode를 둘 다 재정의 해야하는 이유
HSRyuuu
HSRyuuu
Web Backend Developer happyhsryu
HSRyuuu
HS_dev_log
HSRyuuu
전체
오늘
어제
  • 전체 글 보기 (233)
    • Java (25)
    • Spring (27)
    • JPA & QueryDSL (13)
    • Database (17)
    • 자료구조 & 알고리즘 (30)
    • DevOps (10)
    • [ Computer Science ] (47)
      • Web & Network (14)
      • 프로그래밍 이론 (11)
      • 운영체제 (3)
      • 데이터베이스 이론 (5)
      • Linux 리눅스 (7)
    • [ Frontend ] (17)
      • Vue.js & Nuxt.js (9)
      • JSP_Thymeleaf (7)
    • [ 기타 ] (47)
      • 오픈소스 라이브러리 (5)
      • 코딩테스트 (13)
      • Trouble Shooting (7)
      • Tech Interview (6)
      • Book Review (9)
      • 끄적끄적... (5)
      • 개인 프로젝트 (2)

블로그 메뉴

  • 홈
  • 태그
  • github

공지사항

  • GitHub
  • 공부한 내용을 정리하고 기록하는 블로그 입니다.

인기 글

태그

  • 백준
  • Spring
  • Linux
  • SQL
  • 클린코드
  • Redisson
  • Redis
  • 트랜잭션
  • 기술면접
  • 백엔드
  • Database
  • JPA
  • MySQL
  • TechInterview
  • Nuxt3
  • 자료구조
  • 백엔드스쿨
  • springsecurity
  • HTTP
  • 백엔드기술면접
  • 개발자
  • 백엔드공부
  • Java
  • web
  • 리눅스
  • mybatis
  • vue3
  • 제로베이스
  • SpringBoot
  • cleancode

최근 댓글

최근 글

hELLO · Designed By 정상우.
HSRyuuu
[Java] 문자열 붙이기 - StringJoiner와 String.join() 알아보기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.