Java 为什么replaceAll()会删除一个额外的字符

Java 为什么replaceAll()会删除一个额外的字符,java,regex,Java,Regex,我正在使用replaceAll()删除给定字符串中的所有“00”。虽然它删除了所有的00,但它也删除了前面的一个字符 String a = "2400.00"; String a1 = a.replaceAll(".00", ""); 我希望24作为o/p,但得到了2。这个表示正则表达式中的任何字符replaceAll使用正则表达式作为分段。请躲开它a.replaceAll(“\\.00”和“”) 或者只需简单地使用replace(“.00”,”)replaceAll将regex作为第一个参数

我正在使用replaceAll()删除给定字符串中的所有“00”。虽然它删除了所有的00,但它也删除了前面的一个字符

String a = "2400.00";
String a1 = a.replaceAll(".00", "");

我希望24作为o/p,但得到了2。

这个
表示正则表达式中的任何字符
replaceAll
使用正则表达式作为分段。请躲开它<代码>a.replaceAll(“\\.00”和“”)


或者只需简单地使用
replace(“.00”,”)
replaceAll
将regex作为第一个参数。在正则表达式中,sytax
(点)表示任何字符,因此表示结果


要么用
\\
转义该点,要么用
replace
代替
replaceAll
(replace仍然替换所有出现的情况,但参数是要替换的“pattern”,而不是regex)

这是因为
C匹配regex中的任何字符(好吧,除了换行符,但是可以使用适当的标志进行更改)

这就是它匹配
400
以及
.00
并替换它的原因

您需要的是替换
00
.00
,因此您需要模式:
\.?00

说明:

\.?
-匹配
零次或一次

00
-按字面意思匹配
00

代码:


因为接受正则表达式。
表示任何字符。我投票关闭,因为这只是一个输入错误。为什么删除.00会使2400.00中出现24个字符?我认为replace需要出现的次数,您可以给出需要多少个字符。replace all将替换所有字符,就像它需要正则表达式一样。表示所有内容。如果删除所有“00”从给定的字符串中,您将得到
“24”。
,但您期望的是
“24”
。您在这里的期望值是什么?如果您希望将小数值的尾随零和下面的点与2个零匹配,请尝试
(?并替换为第一个捕获组
$1
为什么不使用
replace
呢?如果他对可能发生的情况有更多的期望
replaceAll
是正确的选择。如果你知道它只存在一次,你可以使用
replace
这是不正确的,
replace
也会替换所有发生的情况-如per javadocs用指定的文字替换序列替换该字符串中与文字目标序列匹配的每个子字符串。@ScaryWombat你是对的。
replace
确实会更容易。但我不知道删除字面上的字符串的期望值是什么。00不会像他所说的那样给他24,这是他期望的。我认为e> 替换是OP的目标。
String a = "2400.00";
String a1 = a.replaceAll("\\.?00", "");
System.out.println(a1);