본문으로 바로가기

자바로 문자열을 자를때 쓰는 split을 알아보겠다.


자바에서는 문자열을 split을 이용하여 매우간단하고 쉽게 나눌 수 있다.


split은 문자열에서 나누고싶은 문자 를 기준으로 단어를 나눠 배열로 반환하여 준다.

String str = "hello~java~world";
String[] arr = str.split("~");
for (String string : arr) {
	System.out.println(string);
}
hello
java
world

이처럼 hello~world~java 와 같은 문자열을 "~"를 기준으로 나누었다


하지만 split을 사용함에도 주의할 점이 있는데. 


바로 메타문자로 들어가는 특수문자를 사용할때이다.


물음표(?), 별(*), 더하기(+), 괄호( '(' , ')' ), 대괄호( '[' , ']' ), 중괄호( '{' , '}' ) 이러한 문자를 split으로 나누려고 했을때이다.(파이프(|)는 됨 ㅋ)

str = "hello(java(world";
String[] regular = str.split("(");
for (String string : arr) {
	System.out.println(string);
}
Exception in thread "main" java.util.regex.PatternSyntaxException: Unclosed group near index 1
(
 ^
	at java.util.regex.Pattern.error(Unknown Source)
	at java.util.regex.Pattern.accept(Unknown Source)
	at java.util.regex.Pattern.group0(Unknown Source)
	at java.util.regex.Pattern.sequence(Unknown Source)
	at java.util.regex.Pattern.expr(Unknown Source)
	at java.util.regex.Pattern.compile(Unknown Source)
	at java.util.regex.Pattern.(Unknown Source)
	at java.util.regex.Pattern.compile(Unknown Source)
	at java.lang.String.split(Unknown Source)
	at java.lang.String.split(Unknown Source)
	at StringEx.main(StringEx.java:16)

이와같은 예외를띄움..


하지만 이러한 메타문자를 꼭 나눠야 겠다.. 하면 방법이 없는건 아니다. 이스케이프처리해주면된다.

str = "hello(java(world";
String[] regular = str.split("\\(");
for (String string : arr) {
	System.out.println(string);
}
hello
java
world


이렇게 split() 안에 나누려는 메타문자앞에 \\(역슬래쉬)두번 넣어주면 해당문자는 이스케이프처리되어 나눌수있어진다.



댓글을 달아 주세요

  1. 자올라 2019.10.03 02:06

    역슬레시가 쉬프트₩인거죠?
    제가칠때||이걸로나와서요