我想用一个动态的字符数替换String中的所有匹配项;让我们使用[\d]+
作为一个简单的示例正则表达式:
期望的结果:
1984
- > DDDD
1
- > D
123456789
- > DDDDDDDDD
a 123 b ->
一个DDD b` 替换正则表达式匹配的常见Java方法如下所示:
Pattern p = Pattern.compile("[\d]+");
String input = [...];
String replacement = ???;
String result = p.matcher(input).replaceAll(replacement);
我的问题是:我是否必须提取单个匹配项,测量它们的长度,然后根据它生成替换字符串?或者Java是否提供了更直接的方法呢?
更新:我实际上通过提供相当简单的示例来解决问题。这里还有一些应该被捕获的内容,考虑更多的背景:
<1984/>
(正则表达式:<[\d]+/>
) - &gt; DDDDDDD
123.
- &gt; DDDD
,而:123
- &gt; 123
(即不匹配)注意:我不尝试parse HTML with a regex。
答案 0 :(得分:1)
你真的是在过度思考/过度复杂化。只需将\d
替换为D
as seen here。没有必要获得字符串的长度或进行任何额外的处理;只是一个直线replaceAll()
final String[] a = {"1984","1","123456789","a 123 b"};
for (String s: a) {
System.out.println(s.replaceAll("\\d","D"));
}