由于使用的长度不正确,Matcher.find中的StringIndexOutOfBoundsException

时间:2015-08-03 14:10:27

标签: java regex

也许我没有看到森林的树木,但我对Matcher有一个(对我而言)奇怪的问题。 我在处理StringBuilder时收到此错误消息:

java.lang.StringIndexOutOfBoundsException: String index out of range: 10238
    at java.lang.AbstractStringBuilder.charAt(AbstractStringBuilder.java:210)
    at java.lang.StringBuilder.charAt(StringBuilder.java:76)
    at java.util.regex.Pattern$BnM.match(Pattern.java:5459)
    at java.util.regex.Matcher.search(Matcher.java:1248)
    at java.util.regex.Matcher.find(Matcher.java:637)

StringBuilder的长度和从中派生的String超出了:

length: 10269
length: 10269

这是我的代码:

    Matcher m = LINK_PATTERN.matcher(content);

    System.out.println("length: " + content.length());
    System.out.println("length: " + content.toString().length());

    int hits = 0;
    while (m.find()) {
        ...
        content.replace(m.start("absolut"), m.end("absolut"), "");
        ...
    }

m.find()行是异常触发的地方。

即使在我没有涉及线程/并行处理的测试期间也会出现此问题。 LINK_PATTERN以这种方式定义:

private static final Pattern LINK_PATTERN = Pattern.compile( ...

这种模式有一个命中,但它位于7260位而不是10something。

0 个答案:

没有答案