[Java] String.split() 메타문자로 나누기

배윤석·2022년 5월 2일
0

Java

목록 보기
1/1

split

splitDelimiter(구분기호)를 지정해 문자열을 잘라 배열화 시켜준다.

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

제법 헷갈려서 인터넷에서 계속 찾아본 것이 있다.
추후에도 헷갈릴거 같아 노트정리겸 해서 적어본다.

일반적인 메타문자의 경우에는 \\만 사용하면 된다.
그런데 [](대괄호)의 경우에는 살짝 틀리다.
만약 split을 아래와 같이 사용한다고 가정해보자.

//[USER, seok, nova] 다음 내용을 분해
String[] result = str.split("[,]");

\\를 사용하면 보통은 아래와 같이 사용할 것이라 생각된다.

//[USER, seok, nova] 다음 내용을 분해
String[] result = str.split("\\[,\\]");

이 경우 에러가 발생하는데, 처리방법은 두 가지가 있었다.

1. replace & split 사용

//[USER, seok, nova] 다음 내용을 분해
String[] result = str.replace("[","").replace("]","").split(",");

2. 오로지 split만 사용

//[USER, seok, nova] 다음 내용을 분해
String[] result = str.split("[\\[,\\]]");

[]를 밖에다 한번 더 감싸주니 split이 정상적으로 작동한다.

주의사항 1

위와 같이 split만 사용할 경우 배열이 [2]까지만 나와야 하는데, [3]까지 나왔다.

주의사항2

space bar를 사용하면 에러가 발생한다.
[]안에 사용하면 정상적으로 적용된다.

// 출력
result[0] = "";
result[1] = "USER";
result[2] = "seok";
result[3] = "nova";

인터넷을 찾아봐도 따로 나오는 것이 없다.
한글로만 검색해서 그런건지...
아무튼 이유를 모르겠다.


개발자는 영어 실력이 꼭 필요한 것 같다.
필요하다 생각되어지는 대부분의 자료가 영문으로 되어있다.

영어 실력을 키워서,
나중엔 영어로 찾아보고 수정 해야겠다.

profile
차근차근 한 걸음씩 걸어나가는 개발자 꿈나무.

0개의 댓글