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

當我編譯這個,它說我有一個非法轉義字符在「\ ^」,我試圖告訴它忽略特殊字符「^」並查看「^」爲一個實際的字符串,我沒有正確的語法?正則表達式非法轉義字符

+0

你有沒有看着有效的String **轉義序列** **中的字符串字面**? –

+0

是的,我有,我沒有[\ ^]和(\ ^) –

+0

你顯然沒有。閱讀[本](http://stackoverflow.com/questions/3297867/difference-between-string-object-and-string-literal)和[this](http://stackoverflow.com/questions/1367322/what-是,所有的轉義字符,在Java的)。 –

回答

2

在java中,你需要逃避逃生。從本質上講,你必須使用雙反斜線爲字符串字面量:

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

請注意,您逃生正斜槓在Java(正則表達式或沒有)。

順便說一句,你正則表達式可以簡化爲:

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

嗯我嘗試過,但我的calc GUI仍然崩潰,當我用它 –

+0

@ user3427042我剛剛測試了正則表達式,它編譯(即執行)確定。我認爲正則表達式與轉義無關是有問題的。我懷疑你不想要那裏的所有空間。 – Bohemian

+0

「[()+ * - ]」,因爲這些都是特殊字符,我不需要每個之前都有一個「\」來逃避它的特殊正則表達式的含義嗎? –