2016-08-21 76 views
-2

我試圖在replaceAll函數中使用正則表達式。我需要做一個真正簡單的任務,就是用一個不帶空格的字符切換ever =和〜運算符!replaceAll不影響字符串

例如:

(srcIP = 0.0.0.0) AND (dstIP~0.0.0.0 OR protocol =  TCP) 

變成

(srcIP:0.0.0.0) AND (dstIP:0.0.0.0 OR protocol:TCP) 

我嘗試使用下面的代碼

query.replaceAll("[ ]*(=|~)[ ]*", ":"); 

,但它不工作。有沒有辦法使用replaceAll函數來做到這一點?它似乎不適用於正則表達式。

+0

'replaceAll'和'replace'不改變'String',他們創造一個新的。 – QBrute

回答

0

System.out.println("(srcIP = 0.0.0.0) AND (dstIP~0.0.0.0 OR protocol = TCP)".replaceAll("[ ]*(=|~)[ ]*", ":")); 

工作正常,我

2

你的正則表達式是罰款(儘管它可以改進)。證明:

System.out.println("(srcIP = 0.0.0.0) AND (dstIP~0.0.0.0 OR protocol = TCP)".replaceAll("[ ]*(=|~)[ ]*", ":")); 

打印:

(srcIP:0.0.0.0) AND (dstIP:0.0.0.0 OR protocol:TCP) 

字符串是不可變Java中,replaceAll沒有修改字符串原地的,它返回一個新的。你可能沒有把結果分配回去。

你的正則表達式可以改寫爲:

\\s*[=~]\\s* 
+0

你是完全正確的,我忘了它是永恆的謝謝。 – user3741859