2014-03-31 3 views
0
String[] tokens = infix.split("[0-9]*([.][0-9]+)? | sin | cos | tan | log | \^ | sqrt | \(| \) | \+ | \- | \* | \/"); 

나는 이것을 컴파일 할 때 "\ ^"에 불법 도피 문자가 있음을 알리기 위해 특수 문자 "^"를 무시하고 "^"을 (를) 다음과 같이 표시하려고합니다. 실제 문자열, 내가 구문이 맞지 않아?정규식이 맞지 않는 이스케이프 문자

+0

당신은 ** ** 문자열 리터럴에서 ** 이스케이프 시퀀스 ** 유효한 문자열로 봤어? –

+0

예, 제가했습니다. \ \], (\ ^) –

+0

분명히하지 않았습니다. [this] (http://stackoverflow.com/questions/3297867/difference-between-string-object-and-string-literal) 및 [this] (http://stackoverflow.com/questions/1367322/what- 모두에서 이스케이프 문자입니다. –

답변

2

자바에서는 이스케이프 처리해야합니다. 기본적으로, 당신은 문자열 리터럴에 대한 더블 백 슬래시를 사용해야합니다 : 당신이 기대하지 탈출을

String[] tokens = infix.split("[0-9]*([.][0-9]+)? | sin | cos | tan | log | \\^ | sqrt | \\(| \\) | \\+ | \\- | \\* | /"); 

참고 자바 (정규식 여부)에 슬래시. 여담으로

, 당신이 단순화 될 수 있습니다 정규식 :

String[] tokens = infix.split("[0-9]*([.][0-9]+)? | sin | cos | tan | log | sqrt | [()+*-] | /"); 
+0

hmm 나는 그것을 시도했지만 calc 사용자 GUI는 여전히 내가 그것을 사용했을 때 추락했다. –

+0

@ user3427042 나는 그냥 정규식을 테스트했고, (즉, 실행되었다) OK를 컴파일했다. 정규식에는 이스케이프와 관련없는 문제가 있다고 생각합니다. 나는 네가 거기에있는 모든 공간을 원하지 않는다고 생각한다. – Bohemian

+0

"[() + * -]"이 모든 문자가 특수 문자이기 때문에 특수 정규식의 의미를 벗어나기 전에 각 문자 앞에 "\"가 필요하지 않습니까? –