Java中replaceFirst(".", "")替换了字符串的第一个字符,算是Bug么

测试代码,很简单,如下:

System.out.println("1,234,567.89".replace(".", ""));
System.out.println("1,234,567.89".replaceFirst(".", ""));
System.out.println("1,234,567.89".replace(",", ""));
System.out.println("1,234,567.89".replaceFirst(",", ""));
System.out.println("1,234,567.89".replace("2", ""));
System.out.println("1,234,567.89".replaceFirst("2", ""));
[/code]
按理说replaceFirst()是替换第一个匹配的字符串,当使用"."时,则替换了第一个字符串,没有做匹配。运行结果如下(JDK 6):
[code="java"]
1,234,56789
,234,567.89
1234567.89
1234,567.89
1,34,567.89
1,34,567.89
  • 这是什么原因呢,还是有什么道理在里边。


临摹微笑
浏览 484回答 7
7回答

30秒到达战场

replaceFirst方法第一个参数是正则表达式,小点需要转义试试这个吧System.out.println("1,234,567.89".replaceFirst("\.", ""));

茅侃侃

楼上正解,需要转移的,

元芳怎么了

public String replace(CharSequence target, CharSequence replacement) { return Pattern.compile(target.toString(), Pattern.LITERAL).matcher( this).replaceAll(Matcher.quoteReplacement(replacement.toString())); }

慕侠2389804

:D JAVA中的Replace、ReplaceFirst、Split 等方法 前面的第一个传的参数是正则表达式字符串,"."在正则表达式是是匹配任意字符,所以你用ReplaceFirst总只能替换第一个字符。另外还有很多正则表达式的符号得参考正则表达式的用法了

ibeautiful

第一个参数是正则表达式,.代表任意字符,所以直接替换掉第一个

手掌心

google 正则表达式,元字符。replace方法的参数是字符串,replaceAll/replaceFirst的参数是正则表达式,需要注意对元字符的转义和贪婪匹配

RISEBY

被楼上抢先一步了。。。楼主在查看API的时候要仔细一点,API里面说的很清楚,String replaceAll(String regex, String replacement) 使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串。 String replaceFirst(String regex, String replacement) 使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的第一个子字符串。 :)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java