如何从 'negative' 字母数字字符串中删除前导零

How to remove leading zeros from 'negative' alphanumeric string

大家好。

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

正则表达式

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

Apache Commons

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

和Google番石榴

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

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

您可以使用

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

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

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

this regex demo

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

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