【问题标题】:Remove leading Zeros from Decimal String从十进制字符串中删除前导零
【发布时间】:2019-10-20 18:56:30
【问题描述】:

我想从十进制字符串中删除前导 0。

我现在正在使用下面的代码 sn-p。

inp.replaceAll("^0*","")

在收到0.00 之前,它工作正常。因为如果0.00,它给我.00作为输出,这是不正确的..!

任何人都可以分享它是如何使用正则表达式实现的吗?

【问题讨论】:

  • 0.00 开头的0.^0+(?!\.0+$) 不匹配,因为(?!\.0+$) 不允许匹配后跟. 和1 个或多个零的0。见my answer。我解释了正则表达式的每个部分。
  • 如果您无法理解负前瞻的工作原理,请参阅 herehere,我之前的回答中我详细解释了它们的工作原理。
  • 那么,它最终对你有用吗?如果是,请考虑点击左侧的✓ 接受答案。

标签: java regex


【解决方案1】:

你可以使用

s = s.replaceAll("^0+(?!\\.0+$)", "");

查看regex demoregex graph

详情

  • ^ - 字符串开头
  • 0+ - 一个或多个 0 数字
  • (?!\\.0+$) - 不紧跟 . 和 1+ 个零,直到字符串的末尾。

【讨论】:

  • 它不工作...如果我使用 00.7700 它显示 .7700...不正确 ....!
  • @Elena 然后使用"^0+(?!\\.)""^0+(?=[^.])"。您能否收集您的测试用例并将它们添加到问题中?给你确定的答案会更容易。
【解决方案2】:
@Test
public void testStripLeadingZero() {
    List<String> tests = new ArrayList<>(Arrays.asList(
            "0.05",
            "-0.03",
            "100.03",
            "-100.03",
            "000010",
            "-00020",
            "0077.778",
            "-0088.888"
    ));
    for (String s : tests) {
        String result = s.replaceFirst("^0+", "").replaceFirst("^-0+", "-");
        System.err.println("result: " + result);
    }
}

输出:

result: .05
result: -.03
result: 100.03
result: -100.03
result: 10
result: -20
result: 77.778
result: -88.888

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2021-08-12
    • 2013-08-05
    • 2012-12-06
    • 2014-08-09
    • 1970-01-01
    相关资源
    最近更新 更多