Java正则表达式:替换部分源字符串

Java正则表达式:替换部分源字符串,java,regex,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.sub

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

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    
}
但是我想要这样的东西

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    
}
这可能吗

谢谢

//更改组并自动更新源字符串

在Java中,没有任何方法可以改变任何字符串,所以您所要求的是不可能的

用字符串删除或替换模式可以通过如下调用实现

someString = someString.replaceAll(toReplace, replacement);
转换匹配的子字符串,如您的行所示

m.group().replaceAll("something","");
最好的解决办法可能是使用

  • 结果的
    StringBuffer
  • Matcher.appendReplacement
    Matcher.appendTail
例如:

String regex = "ipsum";
String sourceString = "lorem ipsum dolor sit";

Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(sourceString);
StringBuffer sb = new StringBuffer();

while (m.find()) {
    // For example: transform match to upper case
    String replacement = m.group().toUpperCase();
    m.appendReplacement(sb, replacement);
}

m.appendTail(sb);

sourceString = sb.toString();

System.out.println(sourceString); // "lorem IPSUM dolor sit"

假设要替换某个模式的所有出现,请尝试以下操作:

String source = "aabbaabbaabbaa";
String result = source.replaceAll("aa", "xx");  //results in xxbbxxbbxxbbxx
然后,删除该模式将是:

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

'something'
无法编译,它不是一个字符而是一个字符串。您的意思是要用其他内容替换字符串中的模式吗?您是否尝试过
String#replaceAll(“pattern”,“replacement”)
?这是一种很好的方法,除非您需要转换匹配的子字符串。@aioobe确切地说,我正在努力解释这一点。这正是我想做的。转换匹配的子字符串并以某种方式将其放回原始字符串。