문자열을 지정한 문자를 기준으로 자르는 방법에 대해 알아보겠습니다.
구분자를 지정해 문자열을 자르기 위해서는 split함수를 사용합니다.
split함수를 사용해 문자를 자를 때는 정규식을 지정합니다.
샘플을 보면서 사용 방법을 보겠습니다.
import java.util.Arrays;
public class Program
{
public static void main(String[] args) {
String str = "A,BC,,D";
String[] split = str.split(",");
System.out.println(Arrays.toString(split)); // → [A, BC, , D]
System.out.println(split.length); // → 4
}
}
결과
[A, BC, , D]
4
split함수를 사용해 문자를 분할하였습니다.
자르는 기준은 ,(콤마)로 지정했습니다.
split함수의 반환값은 배열형태로 반환합니다.
str 변수에는 문자를 자를 군부자 문자열인 , (콤마)가 3개 있습니다.
4개로 분할이 되었기 때문에 배열에 길이도 4개가 되었습니다.
만약, 지정한 구분자가 없으면 문자열을 분할하지 않고 그대로 반환을 합니다.
그대로 반환을 하지만 데이터 형태는 배열입니다.
import java.util.Arrays;
public class Program
{
public static void main(String[] args) {
String str = "A,BC,,D";
String[] split = str.split("x");
System.out.println(Arrays.toString(split)); // → [A,BC,,D]
System.out.println(split.length); // → 1
}
}
결과
[A,BC,,D]
1
split함수에 지정한 값은 정규식이기 때문에 주의해서 사용해야 합니다.
예를 들어 .으로 문자열을 자르는 예제를 보도록 하겠습니다.
import java.util.Arrays;
public class Program
{
public static void main(String[] args) {
String str = "A.BC..D";
String[] split = str.split(".");
System.out.println(Arrays.toString(split)); // → []
System.out.println(split.length); // → 0
}
}
정규식에서 .은 임의의 문자 1개를 의미합니다.
구분자를 .으로 하고 싶은 경우에는 \을 붙여 에스케이프 해서 사용해야 합니다.
import java.util.Arrays;
import java.util.regex.Pattern;
public class Program
{
public static void main(String[] args) {
String str = "A.BC..D";
String[] split1 = str.split(".");
String[] split2 = str.split("\\.");
String[] split4 = str.split(Pattern.quote("."));
String[] split3 = str.split("[.]");
System.out.println(Arrays.toString(split1)); // → []
System.out.println(Arrays.toString(split2)); // → [A, BC, , D]
System.out.println(Arrays.toString(split3)); // → [A, BC, , D]
System.out.println(Arrays.toString(split4)); // → [A, BC, , D]
}
}
결과
[]
[A, BC, , D]
[A, BC, , D]
[A, BC, , D]
에스케이프를 하지 않고 Pattern.quote을 사용해서도 가능합니다.
Pattern.quote 사용하기 위해서는 import java.util.regex.Pattern를 해야 합니다.
split함수에 두 번째 파라미터를 지정해 반환값을 조정할 수 있습니다.
import java.util.Arrays;
public class Program
{
public static void main(String[] args) {
String str = "A,B,C,,,";
System.out.println("----- split1 -----");
String[] split1 = str.split(",", 1);
for(int i = 0; i < split1.length; i++) {
System.out.println(i + " : " + split1[i]);
}
System.out.println("\r\n----- split2 -----");
String[] split2 = str.split(",", 2);
for(int i = 0; i < split2.length; i++) {
System.out.println(i + " : " + split2[i]);
}
System.out.println("\r\n----- split3 -----");
String[] split3 = str.split(",", 3);
for(int i = 0; i < split3.length; i++) {
System.out.println(i + " : " + split3[i]);
}
System.out.println("\r\n----- split10 -----");
String[] split10 = str.split(",", 10);
for(int i = 0; i < split10.length; i++) {
System.out.println(i + " : " + split10[i]);
}
}
}
결과
----- split1 -----
0 : A,B,C,,,
----- split2 -----
0 : A
1 : B,C,,,
----- split3 -----
0 : A
1 : B
2 : C,,,
----- split10 -----
0 : A
1 : B
2 : C
3 :
4 :
5 :
두 번째 파라미터에 지정한 값만큼만 문자열을 분할합니다.
split(“,”, 1)는 1개로 나눠서 반환을 했습니다.
1개로 분할했기 때문에 분할 전후가 차이가 없습니다.
split(“,”, 2)는 2개로 나눠서 반환을 했습니다.
첫 번째 구분자로 찾은 문자열과 그 뒤에 문자열 2개로 분할되었습니다.
split(“,”, 3)는 3개로 나눠서 반환을 했습니다.
첫 번째 구분자로 찾은 문자열과 두 번째 찾은 구분자 문자열 그리고 그 뒤에 문자열 3개로 분할되었습니다.
split(“,”, 10)는 6개로 나눠서 반환을 했습니다.
배열에는 구분자인 콤마가 5개 존재하기 때문에 문자열을 최대 6개로 나눌 수 있습니다.
split 함수에 지정한 10보다 최대로 나눌 수 있는 문자열이 적기 때문에 최대치인 6개로 문자열을 분할해 반환했습니다.
댓글