簡體   English   中英

Java String.replaceAll不會代替一美元

[英]Java String.replaceAll doesn't replace a dollar

我想知道為什么只有$拋出java.lang.IllegalArgumentException: Illegal group reference異常而不是其他任何特殊字符:

public static void main(String[] args) {
    String s = "asdf ok done %test%";
    String as=s.replaceAll("%test%", "$dsf");
    System.out.println(as);
}

可以通過在$之前添加\\\\來克服此問題,但是為什么只為此字符添加。

您可以在第一個參數中捕獲組,並在第二個參數中使用它們來表示“在此處插入您匹配的位”:

String as = s.replaceAll("hello (.*) (\\d*)", "goodbye $2 $1");

當使用$ ,正則表達式引擎認為您正在嘗試引用這樣的組。 添加\\\\會使它轉義,從而使它成為一個實際的美元。

Javadoc中對此進行了描述:

請注意,替換字符串中的反斜杠( \\ )和美元符號( $ )可能導致結果與被當作文字替換字符串的結果有所不同。 參見Matcher.replaceAll 如果需要,可以使用Matcher.escapeReplacement(java.lang.String)取消顯示這些字符的特殊含義。)

您可以在文檔中找到答案

請注意,替換字符串中的反斜杠()和美元符號($)可能導致結果與被當作文字替換字符串的結果有所不同;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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