Home [Java] 문자열을 배열로 변환하는 방법
Post
Cancel

[Java] 문자열을 배열로 변환하는 방법

코딩테스트 문제를 풀다가 String을 배열로 변환하는 방법에 대해 공부 중 정리하게 되었습니다.

1️⃣ 구분자 없는 문자열

1. split() - String[] 반환

1
2
3
String s = "hello";
String[] arr = s.split("");
System.out.println(Arrays.toString(arr)); // [h, e, l, l, o]
  • 문자열 각각을 문자열로 나눔 (String[])
  • 성능 : 느림, 내부에서 정규식 사용

2. toCharArray() - char[] 반환

1
2
3
String s = "hello";
char[] arr = s.toCharArray();
System.out.println(Arrays.toString(arr)); // [h, e, l, l, o]
  • 문자열을 문자 배열로 변환
  • 단점: char[]로 나오기 때문에 String 메서드를 바로 못 씀
  • 성능 : 가장 빠름, 정규식 없음, 내부적으로 배열 복사

3. 반복문 - char[] 등 반환

1
2
3
4
5
6
String s = "hello";
char[] arr = new char[s.length()];
for (int i = 0; i < s.length(); i++) {
    arr[i] = s.charAt(i);
}
System.out.println(Arrays.toString(arr)); // [h, e, l, l, o]
  • 가장 유연함, 원하는 자료형으로 직접 조작 가능
  • char[] 외에도 int[], List 등으로 변환 가능
  • 성능 : 빠름

2️⃣ 구분자 있는 문자열

1. split() - String[] 반환

1
2
3
String s = "apple,banana,orange";
String[] arr = s.split(",");
System.out.println(Arrays.toString(arr)); // [apple, banana, orange]
  • 특정 구분자 기준으로 나눔
  • 정규식 기반이라 복잡한 구분자 처리 가능하지만 느릴 수 있음
  • 성능 : 저하 가능성

2. StringTokenizer - String[] 반환

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.*;

String s = "apple,banana,orange";
StringTokenizer st = new StringTokenizer(s, ",");
String[] arr = new String[st.countTokens()];

int i = 0;
while (st.hasMoreTokens()) {
    arr[i++] = st.nextToken();
}

System.out.println(Arrays.toString(arr)); // [apple, banana, orange]
  • 정규식 없이 가볍고 빠름
  • 오래된 방식, 비추천

3️⃣ 전체 내용 정리

구분방법리턴성능특징
구분자 Xsplit("")String[]느림 (정규식)
구분자 XtoCharArray()char[]빠름빠르고 정규식 없음
구분자 X반복문 (charAt)char[]빠름유연, 고성능
구분자 Osplit(",")String[]정규식으로 유연하지만 느림
구분자 OStringTokenizer토큰 객체빠름경량화, 직접 파싱 필요, 구식

4️⃣ 참고

List를 배열로 변환할 때 toArray() 사용

1
2
3
4
5
6
7
8
9
10
11
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");

// 1. 배열 선언과 동시에 할당
String[] arr = list.toArray(new String[0]); // ["a", "b", "c"]

// 2. 배열 선언 후 값 할당
String[] arr2 = new String[list.size()];
list.toArray(arr2); // ["a", "b", "c"]
This post is licensed under CC BY 4.0 by the author.