Java RegEx:替换部分源字符串

时间:2011-10-14 07:40:21

标签: java regex

如果源字符串包含模式,则将其替换为某些内容或将其删除。一种方法是做这样的事情

Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(sourceString);
while(m.find()){
  String subStr = m.group().replaceAll('something',""); // remove the pattern sequence
  String strPart1 = sourceString.subString(0,m.start());
  String strPart2 = sourceString.subString(m.start()+1);
  String resultingStr = strPart1+subStr+strPart2;
  p.matcher(...);
}

但我想要这样的东西

Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(sourceString);
    while(m.find()){
      m.group.replaceAll(...);// change the group and it is source string is automatically updated    
}

这可能吗?

由于

2 个答案:

答案 0 :(得分:9)

  

// change the group and it is source string is automatically updated

没有办法改变Java中的任何字符串,所以你要求的是不可能的。

删除替换带有字符串的模式可以通过类似

的调用来实现
someString = someString.replaceAll(toReplace, replacement);

转换匹配的子字符串,似乎由您的行

表示
m.group().replaceAll("something","");

最好的解决方案可能是使用

  • 结果<{1}}
  • StringBufferMatcher.appendReplacement

示例:

Matcher.appendTail

答案 1 :(得分:2)

假设您要替换特定模式的所有匹配项,请尝试以下操作:

String source = "aabbaabbaabbaa";
String result = source.replaceAll("aa", "xx");  //results in xxbbxxbbxxbbxx

删除模式将是:

String result = source.replaceAll("aa", ""); //results in bbbbbb