繁体   English   中英

Java中的正则表达式以查找字符串是否为带有尾随零的十进制数字格式

[英]Regex in java to find if a String is in the format of a decimal number with a trailing zero

我正在阅读一个字符串列表,其中一些采用小数形式,并将它们与另一个字符串共同映射。 可悲的是,在第一个列表中,我发现所有十进制术语(即所有字符串)都有一个额外的尾随零。 因此,我的.equals()函数或.contains()函数不起作用。

List 1 : 134.20, 16, abacus, 44.10, 12/2/2013, 4, 45.220
List 2 : 134.2,  16, abacus, 44.2,  12/2/2013, 4, 45.22

如何在清单2中添加尾随零? 是否可以使用正则表达式等以某种方式删除尾随零(如果存在)?

相反,我可以删除列表1中的尾随零吗?

要从小数删除尾随零:

String zeroless = str.replaceAll("(\\b\\d+\\.[1-9]*)0+\\b", "$1");

要在没有零的位置添加尾随零:

String zeroless = str.replaceAll("(\\b\\d+\\.\\d*)[1-9]\\b", "$10");

此正则表达式的重要部分是用\\\\b “单词边界”进行换行。


我不确定这两个都有用。 如果您尝试查看字符串中是否包含特定的十进制数,请从中删除尾随零,然后在输入中使用可选的尾随零进行搜索,如下所示:

String num;  // eg 123.456
if (input.matches(".*\\b" + num.replace(".", "\\.").replaceAll("0+$", "") + "0*\\b.*")) {
    // input contains the number
}

这将读取所有不必要的尾随零:

str = str.replaceAll("(\\d+\\.\\d+?)0+", "$1");

例子:

123.456000 --> 123.456
123.000    --> 123.0

更新:在注释中,您询问了如何无条件附加零。 这是您的操作方式:

str = str.replaceAll("(\\d+\\.\\d+)", "$10");

您可以使用String.format()将它们全部取到多少个小数位。

String yourValue = "4.4";
int range = 3;
String zeros = String.format("%."+range+"f", Float.parseFloat(yourValue)); // 3 decimal places
System.out.println(zeros); // prints 4.400

根据需要更改范围,以使所需的小数位数不同。

另外,如果您只是使用它们来检查它们是否相等/更大/更少,那么为什么不将字符串解析为Double(或其他合适的对象),然后将Doubles进行比较,然后比较"2.2" == "2.20"无论如何,您可以为这些对象使用已经定义的equals()compareTo()

您应该使用BigDecimal来比较十进制值,而不是字符串。 摆脱正则表达式,使用新的BigDecimal(String),设置所需的小数compareTo(). ,然后使用compareTo().

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM