歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java中replaceAll()方法的“\”問題

一、前話

看似小小的一個問題,卻往往足矣讓我們困惑了半小時、一小時甚至更久的時間。當你得知真相後,總是會憤怒地罵道:“居然是這樣!這不是坑爹麼!”。嗯哼,這能怪誰?只能說明自己還太嫩!So……平時還是要多注意些細節,要不斷的積累不斷的豐富經驗,日後才能有顯擺的資本。

--------------------------------------分割線 --------------------------------------

編寫高質量代碼 改善Java程序的151個建議 PDF高清完整版 http://www.linuxidc.com/Linux/2014-06/103388.htm

Java 8簡明教程 http://www.linuxidc.com/Linux/2014-03/98754.htm

Java對象初始化順序的簡單驗證 http://www.linuxidc.com/Linux/2014-02/96220.htm

Java對象值傳遞和對象傳遞的總結 http://www.linuxidc.com/Linux/2012-12/76692.htm

Java對象序列化ObjectOutputStream和ObjectInputStream示例 http://www.linuxidc.com/Linux/2012-08/68360.htm

--------------------------------------分割線 --------------------------------------

二、天真的以為

replaceAll()這方法太常見了,一般的字符替換都好理解。但是如果你所要替換的出現了"\"的話,那可就不大一樣了。例如:

str = "D:\test\test2\test3";

要把s1字符串中的"\"替換成"\\";

嗯,很多人可能誤以為是這麼寫: str.replaceAll("\\","\\\\");

可實際上正確的應該是這樣子寫: str.replaceAll("\\\\","\\\\\\\\");

三、真相是這樣

OMG~怎麼要這麼多條槓?不要驚訝,原因其實很簡單。

1、因為"\"在java中是轉義符,在正則表達式中也是轉義符號

2、String.replaceAll(regex, replacement)實際用的是正則表達式的規則去匹配的

3、先java轉義,"\\\\"--解釋成-->"\\";再方法中的正則轉義,"\\"---解釋成-->"\"

總結下:在java中要用正則來表示一個"\",則需4個"\"即("\\\\")。表示"\\",則需要8個"\"即("\\\\\\\\")……以此類推。

四、碎碎念

結語:細心,這東西真的很重要。

Copyright © Linux教程網 All Rights Reserved