❓문제
https://www.acmicpc.net/problem/20291
파일정리라는 알고리즘을 푸는데 split(".")을 사용하여 문제를 풀려고 했다.
Strint tmp = sbrus.txt;
String[] tmp = str.split(".");
>> 예상결과
[sbrus, txt]
>> 실제 결과
[]
그런데 위와 같은 결과가 나왔다.
왜 이런 결과가 나오는 것일까?
그것은 정규식 표현식에서 .는 임의의 문자열을 의미하기 때문이다.
그래서 예상결과를 원한다면 `split(".")`이 아닌 `split("\\.")`이나 `split("[.]")`을 사용해야 한다.
✅ 해결방안
배운 내용 및 잘 모르겠는 점. 느낀 점 등등 기록하기.
1. split("\\.")
\는 이스케이프 문자로 사용된다. 즉, \를 사용하면서 특정한 의미를 갖는 문자를 표현할 수 있게 되는 것이다.
그런데 .은 정규식에서 어떠한 문자를 하나를 의미한다.
그래서 \을 붙여서 \.을 만들어 온점 표시를 해주는 것이다.
그런데 \.에 있는 \를 문자 리터럴 안에 표현해야 하기 때문에 앞에 \를 한 번 더 붙여준다.
2. split("[.]")
[]을 사용하면 [] 괄호 안의 문자가 있는지를 확인한다. 따라서 [] 안에 .을 집어넣으면서 . 문자가 있는지 확인하는 것이다.
📣 참고
정규표현식을 잘 설명해놓은 블로그
'💻개발 > JAVA' 카테고리의 다른 글
알고리즘) Stringbuilder 왜 사용할까? (1) | 2024.01.11 |
---|---|
리터럴 (0) | 2023.06.23 |
int와 Integer (0) | 2023.06.22 |
숫자에 _(언더바) (0) | 2023.06.22 |