我写了一个正则表达式\b\S\w(\S(?=.))
来查找单词中的每个第三个符号并将其替换为“1”。现在我正在尝试使用这个表达式,但实际上并不知道如何正确使用它。
Pattern pattern = Pattern.compile("\\b\\S\\w(\\S(?=.))");
Matcher matcher = pattern.matcher("lemon apple strawberry pumpkin");
while (matcher.find()) {
System.out.print(matcher.group(1) + " ");
}
结果是:
m p r m
我怎样才能用它来制作像这样的字符串
le1on ap1le st1awberry pu1pkin
答案 0 :(得分:6)
您可以使用以下内容:
"lemon apple strawberry pumpkin".replaceAll("(?<=\\b\\S{2})\\S", "1")
会生成您的示例输出。正则表达式将替换前面有两个非空格字符,然后是一个单词边界的任何非空格字符。
这意味着12345
之类的“字词”会更改为12145
,因为3
与\\S
匹配(不是空格)。
修改强>
更新了正则表达式以更好地迎合修订后的问题标题,将2
更改为i-1
以替换该单词的第i个字母。
答案 1 :(得分:0)
还有另一种方法可以访问匹配器
的索引像这样:
Pattern pattern = Pattern.compile("\\b\\S\\w(\\S(?=.))");
String string = "lemon apple strawberry pumpkin";
char[] c = string.toCharArray();
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
c[matcher.end() - 1] = '1';////// may be it's not perfect , but this way in case of you want to access the index in which the **sring** is matches with the pattern
}
System.out.println(c);