2011-03-03 46 views
1

爲什麼我從下面的代碼得到 「AAAAAAAAA」 而不是 「1A234A567」:錯誤輸出使用的replaceAll

String myst = "1.234.567"; 

String test = myst.replaceAll(".", "A"); 

System.out.println(test); 

任何想法?

+0

可能的重複[反斜槓問題與String.replaceAll](http://stackoverflow.com/questions/1701839/backslash-problem-with-string -全部替換) – McDowell 2011-05-26 08:42:47

回答

6

replaceAll函數以正則表達式爲參數。正則表達式「。」意味着「任何角色」。你必須逃避它,以指定它是你想要的字符:replaceAll("\\.", "A")

1

你需要逃避.

使其

String myst = "1.234.567"; 

String test = myst.replaceAll("\\.", "A"); 

System.out.println(test); 
6

試試這個:

String test = myst.replace(".", "A"); 

的區別: replaceAll()解釋模式爲正則表達式,replace()把它解釋作爲字符串文字。

下面是java.lang.String相關的源代碼(由我縮進和評論):

public String replaceAll(String regex, String replacement) { 
    return Pattern.compile(regex) 
        .matcher(this) 
        .replaceAll(replacement); 
} 


public String replace(CharSequence target, CharSequence replacement) { 
    return Pattern.compile(
       target.toString(), 
       Pattern.LITERAL /* this is the difference */ 
      ).matcher(this) 
      .replaceAll(
       Matcher.quoteReplacement(
        /* replacement is also a literal, 
         not a pattern substitution */ 
        replacement.toString() 
      )); 
} 

參考:

0

因爲輸入的每個字符都匹配正則表達式模式(.)。要替換點,請使用此模式:\.(或作爲Java字符串:"\\.")。