0

我正在阅读一个字符串列表,其中一些是小数形式,并将它们与另一个进行比较。可悲的是,在第一个列表中,我发现所有小数项,也就是所有字符串都有一个额外的尾随零。因此,我的 .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 中的尾随零吗?

4

4 回答 4

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
}
于 2013-07-17T00:51:37.230 回答
0

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

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

例子:

123.456000 --> 123.456
123.000    --> 123.0

更新:在评论中,您询问如何无条件地附加一个零。这就是你的做法:

str = str.replaceAll("(\\d+\\.\\d+)", "$10");
于 2013-07-17T00:57:36.407 回答
0

你可以用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()那些对象

于 2013-07-17T00:58:24.833 回答
0

您应该使用 BigDecimal 来比较十进制值,而不是字符串。摆脱正则表达式,使用 new BigDecimal(String),设置你想要的比例,然后使用compareTo().

于 2013-07-17T01:49:29.437 回答