split
은 Delimiter
(구분기호)를 지정해 문자열을 잘라 배열화 시켜준다.
String str = "사과, 귤, 배, 수박";
String[] result = str.split(", ");
// 출력
result[0] = "사과";
result[1] = "귤";
result[2] = "배";
result[3] = "수박";
혹은 Delimiter
여러 개를 사용하여 문자열을 자를 수도 있다.
String str = "!사과, #귤%배, 수박";
String[] result = str.split("!, #%");
// 출력
result[0] = "사과";
result[1] = "귤";
result[2] = "배";
result[3] = "수박";
메타문자란 정규표현식 또는 정규식을 제어할 수 있는 문자를 말한다
특정 Delimiter
, 즉 메타문자는 split을 사용해 바로 나눌 수 없고, 특별한 처리를 해야 나눠진다.
아래 표를 확인하자.
메타문자 | 뜻 |
---|---|
^ | 문자열의 처음을 나타낸다. |
| | or의 뜻으로 선택문에 사용된다. |
? | 앞의 문자가 없거나 하나이다. |
* | 바로 앞의 문자가 없거나 하나 이상이다. |
( | 괄호 안의 문자열은 하나로 묶어 취급한다. |
) | 위와 내용 동일 |
[ | 한 문자를 가리키고 묶음 안의 내용은 가리키는 문자의 범위를 나타낸다. |
] | 위와 내용 동일 |
{ | 앞에 있는 문자의 개수를 나타내고 묶음 안에서 , 는 문자 개수의 범위를 나타낼때 사용한다. |
} | 위와 내용 동일 |
\ | 메타 문자의 성질을 없앨 때 붙인다. |
이러한 메타문자
는 \\
(역슬래쉬 두개)를 사용해 나눠야 한다.
String str = "?사과*귤)배, 수박";
String[] result = str.split("!, #%\\?\\");
// 출력
result[0] = "사과";
result[1] = "귤";
result[2] = "배";
result[3] = "수박";
제법 헷갈려서 인터넷에서 계속 찾아본 것이 있다.
추후에도 헷갈릴거 같아 노트정리겸 해서 적어본다.
일반적인 메타문자의 경우에는 \\
만 사용하면 된다.
그런데 []
(대괄호)의 경우에는 살짝 틀리다.
만약 split
을 아래와 같이 사용한다고 가정해보자.
//[USER, seok, nova] 다음 내용을 분해
String[] result = str.split("[,]");
\\
를 사용하면 보통은 아래와 같이 사용할 것이라 생각된다.
//[USER, seok, nova] 다음 내용을 분해
String[] result = str.split("\\[,\\]");
이 경우 에러가 발생하는데, 처리방법은 두 가지가 있었다.
//[USER, seok, nova] 다음 내용을 분해
String[] result = str.replace("[","").replace("]","").split(",");
//[USER, seok, nova] 다음 내용을 분해
String[] result = str.split("[\\[,\\]]");
[]
를 밖에다 한번 더 감싸주니 split이 정상적으로 작동한다.
위와 같이 split만 사용할 경우 배열이 [2]
까지만 나와야 하는데, [3]
까지 나왔다.
space bar
를 사용하면 에러가 발생한다.
[]
안에 사용하면 정상적으로 적용된다.
// 출력
result[0] = "";
result[1] = "USER";
result[2] = "seok";
result[3] = "nova";
인터넷을 찾아봐도 따로 나오는 것이 없다.
한글로만 검색해서 그런건지...
아무튼 이유를 모르겠다.
개발자는 영어 실력이 꼭 필요한 것 같다.
필요하다 생각되어지는 대부분의 자료가 영문으로 되어있다.
영어 실력을 키워서,
나중엔 영어로 찾아보고 수정 해야겠다.