💻개발/JAVA

split(".") 예상결과가 나오지 않는 이유

i_zzy 2024. 2. 17. 14:33

❓문제

https://www.acmicpc.net/problem/20291

 

20291번: 파일 정리

친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 된 채 가득했기 때문이다. 그리고 화면의 구석에서 친구의 메시지를

www.acmicpc.net

파일정리라는 알고리즘을 푸는데 split(".")을 사용하여 문제를 풀려고 했다. 

 

Strint tmp = sbrus.txt;
String[] tmp = str.split(".");

>> 예상결과
[sbrus, txt]
>> 실제 결과
[]

그런데 위와 같은 결과가 나왔다. 

왜 이런 결과가 나오는 것일까?

그것은 정규식 표현식에서 .는 임의의 문자열을 의미하기 때문이다. 

 

그래서 예상결과를 원한다면 `split(".")`이 아닌 `split("\\.")`이나 `split("[.]")`을 사용해야 한다. 

 

✅ 해결방안

배운 내용 및 잘 모르겠는 점. 느낀 점 등등 기록하기. 

1. split("\\.")

\는 이스케이프 문자로 사용된다. 즉, \를 사용하면서 특정한 의미를 갖는 문자를 표현할 수 있게 되는 것이다. 

그런데 .은 정규식에서 어떠한 문자를 하나를 의미한다. 

그래서 \을 붙여서 \.을 만들어 온점 표시를 해주는 것이다. 

그런데 \.에 있는 \를 문자 리터럴 안에 표현해야 하기 때문에 앞에 \를 한 번 더 붙여준다. 

 

2. split("[.]")

[]을 사용하면  [] 괄호 안의 문자가 있는지를 확인한다. 따라서 [] 안에 .을 집어넣으면서 . 문자가 있는지 확인하는 것이다. 

 

 

📣 참고

정규표현식을 잘 설명해놓은 블로그