Java 连续的替换调用失败
正则表达式中的3个组: 模式=ab123c 我需要摆脱a,b,c 在Java中:Java 连续的替换调用失败,java,regex,Java,Regex,正则表达式中的3个组: 模式=ab123c 我需要摆脱a,b,c 在Java中: while (matcher.find()) { matcher.appendReplacement(sb, ""); matcher.appendReplacement(sb, ""); // fails from here matcher.appendReplacement(sb, ""); } 例外情况: java.lang.StringIndexOutOfBoundsException: St
while (matcher.find()) {
matcher.appendReplacement(sb, "");
matcher.appendReplacement(sb, ""); // fails from here
matcher.appendReplacement(sb, "");
}
例外情况:
java.lang.StringIndexOutOfBoundsException: String index out of range: -30
at java.lang.String.substring(Unknown Source)
at java.lang.String.subSequence(Unknown Source)
at java.util.regex.Matcher.getSubSequence(Unknown Source)
at java.util.regex.Matcher.appendReplacement(Unknown Source)
是否有办法连续替换匹配的组
编辑:sb是一个字符串缓冲区。已尝试使用空的新StringBuffer和非emtpy的新StringBuffertarget_text_str
java 1.6.0_21-b07每个查找调用应该只有一个appendReplacement调用:
这将删除输入中的所有匹配项
如您所述,如果要删除匹配项的某些部分,则必须对要保留的部分进行分组,并将其添加到替换项中。使用ab123c模式,您可以执行以下操作:
while (matcher.find()) {
matcher.appendReplacement(sb, "$1");
}
如果您出于某些其他原因需要其他组(例如,您需要对其进行评估),则您可以保留这些组,即使用ab123c,并使用$3而不是$1引用第三个组。每个查找调用应该只有一个appendReplacement调用:
这将删除输入中的所有匹配项
如您所述,如果要删除匹配项的某些部分,则必须对要保留的部分进行分组,并将其添加到替换项中。使用ab123c模式,您可以执行以下操作:
while (matcher.find()) {
matcher.appendReplacement(sb, "$1");
}
如果您出于某些其他原因需要其他组(例如,您需要对其进行评估),则可以保留它们,即使用ab123c,并使用$3而不是$1引用第三组
看
请参阅@Oltarus:它可能是一个StringBuffer.@Oltarus:abterm1,term2,term3c@Oltarus:它可能是一个StringBuffer。@Oltarus:abterm1,term2,term3c为什么这会替换$1和$2?@D_K,它会用您想要保留的部分替换整个匹配项,从而删除您不想要的部分。这很好,错过了123部分。伟大的你和约阿希姆·绍尔都有资格得到答案。stackoverlow不允许我将这两个标记为问题的答案。为什么这将替换$1和$2?@D_K,它将整个匹配替换为您想要保留的部分,从而删除您不想要的部分。这很好,错过了123部分。伟大的你和约阿希姆·绍尔都有资格得到答案。stackoverlow不允许我将两者都标记为问题的答案。
pattern = "(a)(b)(123)(c)"
// ...
while (matcher.find()) {
matcher.appendReplacement(sb, "$3");
}