[英]How to escape $ in java?
我正在嘗試下面的代碼,但出現錯誤
String x = "aaa XXX bbb";
String replace = "XXX";
String y = "xy$z";
String z=y.replaceAll("$", "\\$");
x = x.replaceFirst(replace, z);
System.out.println(x);
錯誤
Exception in thread "main" java.lang.IllegalArgumentException: Illegal group reference
at java.util.regex.Matcher.appendReplacement(Unknown Source)
at java.util.regex.Matcher.replaceFirst(Unknown Source)
at java.lang.String.replaceFirst(Unknown Source)
at Test.main(Test.java:10)
我想要結果
aaa xy$z bbb
使用replace()
代替,它不使用正則表達式,因為您根本不需要它們:
String x = "aaa XXX bbb";
String replace = "XXX";
String y = "xy$z";
x = x.replace(replace, y);
System.out.println(x);
如預期的那樣,這將打印aaa xy$z bbb
。
如果替換字符串包含美元符號或反斜杠字符,則應使用
Matcher.quoteReplacement()
所以改變
String z=y.replaceAll("$", "\\$");`
至
String z = Matcher.quoteReplacement(y);
錯誤的原因是在該行之后:
String z=y.replaceAll("$", "\\$");
z
的值是: xy$z$
您真正想要做的是:
String x = "aaa XXX bbb";
String replace = "XXX";
String y = "xy\\$z";
x = x.replaceFirst(replace, y);
System.out.println(x);
將輸出:
aaa xy$z bbb
由於replaceFirst而產生的問題ID String z=y.replaceAll("$", "\\\\$");
是xy$z$
用給定的替換項替換與給定的正則表達式匹配的此字符串的第一個子字符串。 調用該方法的形式為str.replaceFirst(regex, repl)
其結果與表達式完全相同
Pattern.compile(regex).matcher(str).replaceFirst(repl)
請注意 ,替換字符串中的反斜杠( \\
)和美元符號( $
)可能導致結果與被視為文字替換字符串時的結果不同;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.