我需要一个正则表达式来删除某些字符,但保留删除到新字符串中的内容。我希望避免使用两个单独的表达式。
实施例, 假设我想从字符串中删除所有数字但保留它们并将它们放在不同的字符串中。 " a1b23c"会成为" abc"和#34; 123"
的新字符串感谢您的帮助!
答案 0 :(得分:1)
您可以使用Matcher.appendReplacement()
和Matcher.appendTail()
执行使用查找/替换循环描述的内容。以你的例子:
Matcher matcher = Pattern.compile("\\d+").matcher("a1b23c");
StringBuffer nonDigits = new StringBuffer();
StringBuffer digits = new StringBuffer();
while (matcher.find()) {
digits.append(matcher.group());
matcher.appendReplacement(nonDigits, "");
}
matcher.appendTail(nonDigits);
System.out.println(nonDigits);
System.out.println(digits);
输出:
abc
123
这种方法必须使用StringBuffer
代替StringBuilder
,因为这是Matcher
支持的内容。
答案 1 :(得分:0)
如果你正在做一些简单的事情,比如移除数字,那么使用一对StringBuilder
会更容易:
StringBuilder digits = new StringBuilder();
StringBuilder nonDigits = new StringBuilder();
for (int i = 0; i < str.length(); ++i) {
char ch = str.charAt(i);
if (Character.isDigit(ch) {
digits.append(ch);
} else {
nonDigits.append(ch);
}
}
System.out.println(nonDigits);
System.out.println(digits);