[英]Java String.replaceAll doesn't replace a quote with escaped quote
很難用轉義報價替換報價。 我有一個字符串,其值為'Foo'bar“foobar”,我試圖用轉義引號替換bar周圍的引號,但它無效。 我快瘋了。
s=s.replaceAll("\"","\\\"");
我希望s有'foo \\“bar \\”foobar'的值,但事實並非如此。 有幫助嗎?
replaceAll
使用正則表達式 - 其中反斜杠只是轉義下一個字符,即使在替換中也是如此。
改為使用replace
,它很好......或者如果你想使用正則表達式形式,你可以在第二個參數中加倍反斜杠:
String after = before.replaceAll("\"", "\\\\\"");
如果您需要使用正則表達式匹配輸入,這可能很有用,但我強烈建議您使用非正則表單形式,除非您確實需要正則表達式行為。
就個人而言,我認為String
方法使用正則表達式開始是錯誤的 - 像foo.split(".")
類的東西會分裂在每個字符而不是句點上,完全出乎意料地對於那些不知情的開發人員。
使用s = s.replace("\\"", "\\\\\\"");
,這是非正則表達式版本。
你需要轉義兩個替換所有參數,因為它們是正則表達式!
@Test
public void testReplace() {
assertEquals("foo\\\"bar\\\"",
"foo\"bar\"".replaceAll("\\\"", "\\\\\\\""));
}
因此,如果你想寫"
你需要逃避正則表達式 - > \\"
但因為你在java中,你需要逃避\\
和"
for java to,所以你得到\\\\\\\\"
。 (即搜索參數)。
對於替換參數,您希望在regex中使用\\"
- >: \\\\\\"
- >在Java \\\\\\\\\\\\\\"
s=s.replaceAll("\"","\\\\\"");
但你真的應該使用replace(...)
作為其他人的建議。
采用;
s=s.replaceAll("\"","\\\\\"");
String str = "'Foo \"Bar\" Bar'";
System.out.println(str);
System.out.println(str.replaceAll("\"", "\\\\\""));
請按照以下程序使用> s.replace(“/"."//”);
public class stringbackslash {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s="\";
s=s.replace("\", "\\");
System.out.println(s);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.