【问题标题】:How to remove leading zeros from 'negative' alphanumeric string如何从“负”字母数字字符串中删除前导零
【发布时间】:2021-09-08 10:27:25
【问题描述】:

大家好。

我有一个字母数字值。例如:“-00000050.43”。而且我需要将其转换为 BigDecimal(首选,'因为它是 $ 的数量)或 Float 或 Double(取决于 '.' 之后的位数。通常有两位数),例如“-50.43”。 因此,对于 positive 字母数字值,我有 3 种不同的解决方案。请在下面查看它们:

正则表达式

"00000050.43".replaceFirst("^0+(?!$)", "")

Apache Commons

StringUtils.stripStart("00000050.43","0");

还有谷歌番石榴

CharMatcher.is('0').trimLeadingFrom("00000050.43")

它不适用于负值。不幸的是,我一开始不知道如何处理'-'。 多谢你们!祝你有美好的一天。

【问题讨论】:

  • 为什么不直接解析成数字类型呢?
  • @Stultuske 抱歉,我不明白。什么意思?
  • 您无需删除前导零即可将其解析为 Bigdecimal。只需按原样获取字符串:BigDecimal bd = new BigDecimal("-00000050.43");
  • @Eritrean 是的,你是对的。作为一种解决方案,它很有用。

标签: java regex guava apache-commons


【解决方案1】:

如果要将字母数字字符串值转换为BigDecimal,则无需对该字符串执行任何操作。 BigDecimal 有一个构造函数,它接受 string 字母数字值作为参数。

String val = "-0000054.1";
BigDecimal bd = new BigDecimal(val);

【讨论】:

  • 当然,它适用于我的情况以及正则表达式。谢谢!
  • @junior_java_develop 你为什么要使用正则表达式,如果它没有工作?
  • @AndyTurner 在客户想要为值添加要求的情况下。就像,将它作为 varchar 存储在 DB 中。所以我不再需要将这个变量保存为 BigDecimal。
  • @junior_java_develop 如果需要,您可以使用bd.toString()。将其存储在“以防万一”的字符串中称为stringly-typed code
【解决方案2】:

你可以使用

"00000050.43".replaceFirst("^(-?)0+(?!$)", "$1")

^(-?)0+(?!$) 模式将匹配

  • ^ - 字符串开头
  • (-?) - 组 1(替换模式中的$1 将引用该组值,如果匹配到 -,它将在结果字符串中恢复):可选的 -
  • 0+ - 一个或多个零
  • (?!$) - 不允许在右侧立即结束字符串位置。

this regex demo

【讨论】:

    猜你喜欢
    • 2014-06-25
    • 2011-02-17
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 2014-04-12
    相关资源
    最近更新 更多