2017-04-01 70 views
2

我有一個用例,我想在html字符串中替換一些值,所以我需要爲replaceAll做這件事,但那不工作,雖然替換工作正常,這裏是我的代碼:模式替換字符串中的轉義字符失敗與replaceAll

String str = "<style type=\"text/css\">#include(\"Invoice_Service_Tax.css\")</style>"; 
    String pattern = "#include(\"Invoice_Service_Tax.css\")"; 
    System.out.println(str.replace(pattern, "some-value")); 
    System.out.println(str.replaceAll(pattern, "some-value")); 

輸出爲:

<style type="text/css">some-value</style> 
<style type="text/css">#include("Invoice_Service_Tax.css")</style> 

對於我的使用情況下,我只需要做的replaceAll,我試着用下面的模式,但也沒有幫助:

"#include(\\\"Invoice_Service_Tax.css\\\")" 
"#include(Invoice_Service_Tax.css)" 

回答

3

替換不尋找特殊字符,只是一個文字替換,而replaceAll使用正則表達式,所以有一些特殊字符。

正則表達式的問題是,(是一個特殊的字符分組,所以你需要逃避它。

#include\\(\"Invoice_Service_Tax.css\"\\)應與工作中的replaceAll

+0

這個工作對我來說:) – user2098324

1

String.replaceString.replaceAll之間的關鍵區別在於String.replace第一個參數是​​,但String.replaceAll這是一個regexjava doc of those two methods對此有很好的解釋。所以,如果有特殊字符像\或要替換字符串中$,你會再次看到不同的行爲,如:

public static void main(String[] args) { 
    String str = "<style type=\"text/css\">#include\"Invoice_Service_Tax\\.css\"</style>"; 
    String pattern = "#include\"Invoice_Service_Tax\\.css\""; 
    System.out.println(str.replace(pattern, "some-value")); // works 
    System.out.println(str.replaceAll(pattern, "some-value")); // not works, pattern should be: "#include\"Invoice_Service_Tax\\\\.css\"" 
}