Java 删除尾随小数点&;带正则表达式的零

Java 删除尾随小数点&;带正则表达式的零,java,regex,string,Java,Regex,String,这是从字符串中删除尾随小数和零的合适正则表达式吗?我不能让它工作。我错过了什么 78.000->78 78.008->78.008 str.replaceAll(“^.0*$”,”)不。使用以下命令: str.replaceAll("[.0]+$", ""); 去掉与字符串开头匹配的^。您还需要转义,因为它是与任何字符(除换行符外)匹配的正则表达式元字符: 演示:您需要转义,因为它是正则表达式中与任何字符匹配的特殊字符。您还必须删除锚定在数字开头的^ str.replaceAll("\\.0*

这是从字符串中删除尾随小数和零的合适正则表达式吗?我不能让它工作。我错过了什么

  • 78.000->78
  • 78.008->78.008
  • 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附近没有明显的最大长度”@Daniel
    str.replaceAll(\.*0*$,“”)
    适用于“78.0000”、“78.08”和“78.80000”。@RohanKandwal不确定您是否注意到,但此答案只有一个
    *
    0
    之后,您之前也有一个。
    str.replaceAll("(?<=^\\d+)\\.0*$", "");