Java string.match / string.replace与正则表达式无法正确匹配

时间:2014-01-15 05:49:56

标签: java regex string

我有一个字符串"123.0"并使用"123.0".matches( "(\\.)?0*$" )来检查它是否有任何尾随零但是它不匹配。相同的正则表达式正确匹配字符串@ http://regexpal.com/

如果我想用其他东西替换最后的零,怎么样? String.replace说:

  

replace(CharSequence目标,CharSequence替换) -   将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列。

但是"123.0".replace( "(\\.)?0*$", "" )它不会替换最后一个“.0”。

2 个答案:

答案 0 :(得分:1)

java.lang.String.matches方法匹配整个字符串,而不是它的一部分。 (无需指定^$)。

所以你的模式字符串应该是:

"\\d+\\.?0*"

Demo

根据问题编辑

更新

您应该使用replaceAll代替replacereplace不接受正则表达式。它按字面解释第一个参数。

"123.0".replaceAll("\\.0*$", "")

答案 1 :(得分:1)

与大多数其他语言不同,java的匹配要求整个字符串匹配,因此您必须在正则表达式中添加前导.*

if (str.matches(".*\\.0+"))

请注意,你的正则表达式似乎有点不对 - 一切都是可选的,所以它会匹配任何东西。试试这个正则表达式。

另外,因为它必须匹配整个字符串,所以隐含了^和$(如果你想要编码它们 - 它没有区别)