在 replaceAll 调用中修改部分正则表达式

Modifying part of a regex in replaceAll call

我正在尝试使用正则表达式格式化字符串,如下所示:

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"

中完成所有事情

感谢任何建议

匹配的字符将被替换。因此,您可以使用先行,而不是 匹配 末尾的非数字,这将执行所需的检查但不会消耗任何字符。此外,非数字的 shorthand 是 \D,比 [^0-9]:

更易读
String string = "5.07+12.0+2.14";
string = string.replaceAll("\.0(?=\D)","");

如果您想替换 所有 尾随零(例如,将 5.00 替换为 5 而不是 50,您可能不想),然后用 + 重复 0 一次或多次,以确保 all 替换小数点后的零:

String string = "5.07+12.000+2.14";
string = string.replaceAll("\.0+(?=\D)","");

如果字符串从不包含 字母或下划线 _ 字符(这些字符和数字字符算作单词字符),那么您可以使用单词使其更漂亮边界而不是前瞻。单词边界,顾名思义,将匹配一个位置,一侧是单词字符,另一侧是非单词字符,\b:

string = string.replaceAll("\.0+\b","");