我正在尝试使用正则表达式格式化字符串,如下所示:
String string = "5.07+12.0+2.14";
string = string.replaceAll("\\.0[^0-9]","");
我认为会发生的是字符串将成为:
5.07+122.14 //the regex will delete the .0+ next to the 12
如何创建正则表达式,使其仅删除.0而不删除+符号?
我更喜欢在“replaceAll”的同一个电话中做所有事情
谢谢你的任何建议
匹配的字符将被替换。因此,您可以使用lookahead来执行所需的检查,但不会消耗任何字符,而不是在末尾匹配非数字。此外,非数字的简写是\D
,它比[^0-9]
更好读:
String string = "5.07+12.0+2.14";
string = string.replaceAll("\\.0(?=\\D)","");
如果要替换所有尾随零(例如,将5.00
替换为5
而不是50
,您可能不需要),则使用+
重复0次,以确保小数点后的所有零都被替换:
String string = "5.07+12.000+2.14";
string = string.replaceAll("\\.0+(?=\\D)","");
如果字符串从不包含字母或下划线_
字符(那些和数字字符计为单词字符),那么你可以使它更加漂亮,使用单词边界而不是前瞻。听起来,单词边界将匹配一侧的单词字符和另一侧的非单词字符的位置,使用\b
:
string = string.replaceAll("\\.0+\\b","");