2017-04-01 4 views
2

Ich habe einen Anwendungsfall, wo ich einige Werte in HTML-Zeichenfolge ersetzen möchte, also muss ich replaceAll dafür tun, aber das funktioniert nicht, obwohl ersetzen funktioniert gut, hier ist mein Code:Muster Ersetzen in Zeichenfolge mit maskierten Zeichen fehlgeschlagen mit 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")); 

Ausgabe lautet:

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

Für meine Anwendungsfall muss ich replaceAll nur tun, ich mit unten Muster auch versucht, aber keine Hilfe:

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

Antwort

3

Ersetzen sucht nicht nach speziellen Zeichen, nur ein Literal ersetzen, während replaceAll Regexes verwendet, so gibt es einige Sonderzeichen.

Das Problem mit der Regex ist, dass ( ist ein Sonderzeichen für die Gruppierung, so dass Sie es entkommen müssen.

#include\\(\"Invoice_Service_Tax.css\"\\) sollten mit Ihrem replaceAll

+0

dies für mich gearbeitet :) – user2098324

1

Der wesentliche Unterschied zwischen String.replace arbeiten und String.replaceAll ist, dass der erste Parameter für String.replacestring literal ist, aber für String.replaceAll ist es ein regex. java doc of those two methods hat eine gute Erklärung dafür. Also, wenn es Sonderzeichen wie \ oder $ in der Zeichenfolge, die Sie ersetzen möchten, müssen Sie die verschiedenen benimmt sich wieder sehen, wie:

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\"" 
} 
Verwandte Themen