Java 删除尾随小数点&;带正则表达式的零
这是从字符串中删除尾随小数和零的合适正则表达式吗?我不能让它工作。我错过了什么Java 删除尾随小数点&;带正则表达式的零,java,regex,string,Java,Regex,String,这是从字符串中删除尾随小数和零的合适正则表达式吗?我不能让它工作。我错过了什么 78.000->78 78.008->78.008 str.replaceAll(“^.0*$”,”)不。使用以下命令: str.replaceAll("[.0]+$", ""); 去掉与字符串开头匹配的^。您还需要转义,因为它是与任何字符(除换行符外)匹配的正则表达式元字符: 演示:您需要转义,因为它是正则表达式中与任何字符匹配的特殊字符。您还必须删除锚定在数字开头的^ str.replaceAll("\\.0*
str.replaceAll(“^.0*$”,”)代码>不。使用以下命令:
str.replaceAll("[.0]+$", "");
去掉与字符串开头匹配的^
。您还需要转义
,因为它是与任何字符(除换行符外)匹配的正则表达式元字符:
演示:您需要转义
,因为它是正则表达式中与任何字符匹配的特殊字符。您还必须删除锚定在数字开头的^
str.replaceAll("\\.0*$", "");
如果要确保圆点前面有一个数字,可以使用lookback,如下所示:
str.replaceAll("(?<=^\\d+)\\.0*$", "");
str.replaceAll(“(?这不太正确,因为它会导致类似2.000.000
的内容转换为2
@NullUserExceptionఠ_ఠ - 嗯,这不是OP想要的吗?也许。按照我的解释,这应该转换成2.000
,它需要转换成2。谢谢你!@FelixYan-没错。我们不是在这里建造宇宙飞船。我们是在解决OP的问题,这个问题总是在处理一个“十进位”的问题“字符串。我不是下一个投票人,但你的lookbehind不起作用-Java要求lookbehinds具有最大长度,因此你不能在它们内部使用+
或*
。此外,你可能应该改进最后一句话的措辞-lookbehind可以是匹配的一部分,它只是匹配一个位置而不是一个字符。”(在这种情况下,这个位置是在比赛之前)可以做类似于str.replaceAll((?@PeterBoughton,似乎很好。你确定后面的部分吗?嗯。我确定-我总是忘记并遇到这个问题,不得不切换到{0,99}
或{1,99}
取而代之。现在我很困惑。/@PeterBoughton,我查了一下:。显然,lookback中的匹配必须小于整数。MAX_值
。而且,+
被实现为{1,0x7fffff}
。因此,因为lookback中只有一个字符(\d
),它会工作。但是如果我再添加一个,就像它失败了一样。好吧,我没有发疯,但我也不知道发生了什么…做\d*
工作。做\d+
工作。做\d\d*
会抛出错误“Look-behind group在索引8附近没有明显的最大长度”@Danielstr.replaceAll(\.*0*$,“”)
适用于“78.0000”、“78.08”和“78.80000”。@RohanKandwal不确定您是否注意到,但此答案只有一个*
在0
之后,您之前也有一个。
str.replaceAll("(?<=^\\d+)\\.0*$", "");