[Java] 정규식 - (하이픈)은 범위지정자
정규식 Syntax Error
문제
에러나는 코드는 아래와 같다.
String[] splited = binomial.split("[+-*]");
자바에서 binomial.split("[+-*]")
이 부분은 조금 위험하다. 왜냐하면 -
가 문자 클래스([]
) 안에서 범위 지정 역할을 하기 때문이다.예를 들어, [+-*]
는 자바 정규식에서 +
, -
, *
를 의미하는 게 아니라 +
부터 *
까지의 범위(유니코드 순서상)를 의미할 수 있어서 예상과 다르게 동작할 수 있고 위 화면처럼 에러가 난다.
해결방법
-
를 문자 클래스 안에서 문자 그대로 인식시키려면, 가장 앞이나 뒤에 놓거나, \\-
로 이스케이프 해서 쓰면 된다.
String[] splited = binomial.split("[+\\-*]");
또는
String[] splited = binomial.split("[-+*]");
이렇게 하면 +
, -
, *
3가지 연산자를 정확히 분리할 수 있다.
정리
-
는 문자 클래스 안에서 특수하니까 조심해야 한다.split("[+\\-*]")
또는split("[-+*]")
이렇게 쓰자split("[+-*]")
는 가급적 피하자
출처 : chatGPT