2014-01-27 82 views
2

我有下面的代碼的replaceAll不工作

String s = "A'BDG"; 

System.out.println(s.replaceAll("'", "\\'")); 

所以輸出是同一個String,它不與\'更換'。但它與replace()工作正常,所以最新的問題replaceAll()

回答

2

只需使用String.replace(CharSequence target, CharSequence replacement)如果你正在處理的文本字符串:

s.replace("'", "\\'") 

它將用\'替換字符串中所有'的實例。


String.replaceAll(String regex, String replacement)的和String.replaceFirst(String regex, String replacement)功能與Pattern(正則表達式)的工作原理。

儘管"'"是模式沒有問題,替換字符串"\\'"是您的問題的來源。由於替換字符串可以包含特殊的序列,例如$1以引用捕獲組捕獲的文本,因此語法必須允許通過轉義\\$指定明文$。這種轉義將導致\'在替換字符串語法中被解釋爲'

這就是爲什麼您需要將轉義字符"\\\\'"翻倍以使替換字符串正常工作。一層轉義爲\\'replaceAll/replaceFirst函數,下一層使替換字符串被解釋爲\'

s.replaceAll("'", "\\\\'") 

在這種情況下,Matcher.quoteReplacement(String s)可以用來當你想用固定字符串替換引用替換字符串:

s.replaceAll("'", Matcher.quoteReplacement("\\'")) 
+0

謝謝。明白了你的觀點。 – commit

3

使用

String s = "A'BDG"; 
System.out.println(s.replaceAll("\\'", "\\\\'")); 

你必須\\replaceAll()

出逃避'地說:

A\'BDG 
+0

搜索可以用'「「」',這裏的問題是替換字符串來完成。 – nhahtdh

+0

@nhahtdh是的。更正確。 –

0

當您使用替換功能,它確定了逃逸符號不同,添加另一個\\並以正確的方式調用replaceAll方法。 如果你

s.replace("'", "\\'") 

就會自動調用

s.replaceAll("\\'", "\\\\'") 

但是,如果你調用函數的replaceAll直接它不`噸有任何線索,以確定特殊charactors像'由它自己的\。如果你進入替換函數,你會看到在replaceable函數中通過quoteReplacement方法將該附加的\添加到這個轉義字符中。

,所以如果你想使用全部替換功能,使用它柔韌額外逃生charactors像

s.replaceAll("\\'", "\\\\'") 

歡呼