簡體   English   中英

Java String.replaceAll不替換帶有轉義引用的引號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM