Java Regex用于更改字符串中每个单词的每个第i个索引

时间:2013-03-06 08:48:32

标签: java regex

我写了一个正则表达式\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

2 个答案:

答案 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);