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确切地说,我正在努力解释这一点。这正是我想做的。转换匹配的子字符串并以某种方式将其放回原始字符串。