我需要从十进制字符串中删除零 例如:007.004(100.007)应转换为7.4(100.7)
我尝试使用基于模式的匹配器" 0 +(\ d)":
Pattern p = Pattern.compile(regex);
Matcher m = null;
try {
m = p.matcher(version);
while (m.find()) {
System.out.println("Group : " + m.group());
System.out.println("Group 1 : " + m.group(1));
version = version.replaceFirst(m.group(), m.group(1));
System.out.println("Version: " + version);
}
但这导致7.4(10.7)。有什么想法吗?
答案 0 :(得分:0)
您需要使用此模式进行替换:
(\\([^)]+\\))|0+
和这个替换字符串
\\1
换句话说,您需要首先捕获括号之间的所有内容,然后查找零。使用replaceAll
方法。
答案 1 :(得分:0)
如果您尝试在非零数字之前删除前导零,则可以使用此模式匹配此类运行:"(?<!\\d)0+(?=[1-9])"
。甚至使用零长度前瞻,因为你的标签暗示你可能想做。使用它比你的更简单,因为它不匹配你想要保留的任何东西:
Pattern p = Pattern.compile("(?<!\\d)0+(?=[1-9])");
Matcher m = p.matcher(version);;
version = matcher.replaceAll("");
如果您只打算这样做一次,那么您可以简化为单行:
version = version.replaceAll("(?<!\\d)0+(?=[1-9])", "");
答案 2 :(得分:0)
在匹配另一个字符串时,无需在另一个字符串中执行替换:
while (m.find()) {
version = version.replaceFirst(m.group(), m.group(1));
您可以改为使用此替代品:
version = version.replaceAll("(^|\\.)0+", "$1");