728x90
개요
위 문제처럼 split() 메서드를 사용하여 지정한 구분자로 분리하려고 할 때 구분자가 "+"면 별도의 처리를 해줘야 합니다.
split("+")가 안 되는 이유
Java의 String.split() 메서드에서 "+"가 제대로 작동하지 않는 이유는 +가 정규식에서 특별한 의미를 가지는 메타문자이기 때문입니다.
정규표현식에서 :
'+'
- 직전 패턴이 1회 이상 반복됨을 의미합니다.
- "a+"는 "a", "aa", "aaa" 등을 매칭.
'-'
특별한 의미가 없는 일반 문자로 취급됩니다.
에러 예시 확인해보기
public static void main(String[] args) {
String input = "10+20+30+40";
String[] numbers = input.split("+"); // 정규식 메타문자 '+'를 이스케이프 처리하지 않음
for (String number : numbers) {
System.out.println(number);
}
}
해결방법
String[] num = number.split("\\+"); // '\\'를 사용해 이스케이프 처리
+를 문자열 그대로 처리하고 싶다면 백슬래시(\)를 사용하여 이스케이프 처리해야 합니다.
public class SplitEscapeExample {
public static void main(String[] args) {
String input = "10+20+30+40";
String[] numbers = input.split("\\+"); // '+'를 이스케이프 처리
for (String number : numbers) {
System.out.println(number);
}
}
}
실행결과
10
20
30
40
이스케이프 처리가 필요한 메타문자 목록
문자 | 의미 | 예제 |
. | 임의의 문자 (개행 제외) | split("\\.") |
* | 0번 이상 반복 | split("\\*") |
+ | 1번 이상 반복 | split("\\+") |
? | 0 또는 1회 | split("\\?") |
^ | 문자열의 시작 | split("\\^") |
$ | 문자열의 끝 | split("\\$") |
{} | 범위 또는 반복 횟수 | split("\\{") |
[] | 문자 클래스 | split("\\[") |
() | 그룹화 및 캡처 | split("\\(") |
` | ` | OR 연산 |
\ | 이스케이프 문자 자체 | split("\\\\") |
정규식에서 메타문자로 사용되는 일부 문자는 이스케이프 처리가 필요합니다. 이런 문자들은 특별한 의미를 가지기 때문에 단순히 문자열로 취급하려면 앞에 \\를 붙여야 합니다.