gpt4 book ai didi

java - 连续的 appendReplacement 调用失败

转载 作者:行者123 更新时间:2023-11-29 03:55:33 24 4
gpt4 key购买 nike

正则表达式中的3组:

模式 = (a)(b)123(c)

我需要摆脱 a,b,c

在 Java 中:

while (matcher.find()) {
matcher.appendReplacement(sb, "");
matcher.appendReplacement(sb, ""); // fails from here
matcher.appendReplacement(sb, "");
}

异常(exception):

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。空的 new StringBuffer() 和非空的 new StringBuffer(target_text_str) 都试过了。

Java 1.6.0_21-b07

最佳答案

每次 find() 调用你应该只有一个 appendReplacement() 调用:

while (matcher.find()) {
matcher.appendReplacement(sb, "");
}

这将删除您输入中的每个整个匹配项。

如果如您所指出的那样,您想要删除匹配项的某些部分,那么您必须将您想要保留的部分分组并将其添加到替换项中.使用模式 ab(123)c 你会这样做:

while (matcher.find()) {
matcher.appendReplacement(sb, "$1");
}

如果您出于某些其他原因需要其他组(例如,您需要评估它们),那么您可以保留它们(即使用 (a)(b)(123)(c)并使用 $3 而不是 $1 引用第三组。

关于java - 连续的 appendReplacement 调用失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6595584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com