我正在阅读一个字符串列表,其中一些是十进制形式,并将它们与另一个字符串相互映射。可悲的是,在第一个列表中,我发现所有的十进制术语,即所有字符串都有一个额外的尾随零。因此,我的.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中的尾随零点吗?
答案 0 :(得分: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
}
答案 1 :(得分:0)
这将读取所有不必要的尾随零:
str = str.replaceAll("(\\d+\\.\\d+?)0+", "$1");
示例:
123.456000 --> 123.456
123.000 --> 123.0
更新:在评论中,您询问如何无条件地附加零。你就是这样做的:
str = str.replaceAll("(\\d+\\.\\d+)", "$10");
答案 2 :(得分: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(或其他合适的对象),然后比较双打然后"2.2" == "2.20"
无论如何,您可以使用已定义的equals()
和compareTo()
来表示这些对象
答案 3 :(得分:0)
您应该使用BigDecimal来比较小数值,而不是字符串。摆脱正则表达式,使用新的BigDecimal(String),设置所需的比例,然后使用compareTo().