我想解析一个html字符串。它抛出异常如下。 内容长度大于65536,那问题呢?谢谢!
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 66467
at org.jsoup.parser.CharacterReader.nextIndexOf(CharacterReader.java:92)
at org.jsoup.parser.CharacterReader.containsIgnoreCase(CharacterReader.java:277)
at org.jsoup.parser.TokeniserState$11.read(TokeniserState.java:219)
at org.jsoup.parser.Tokeniser.read(Tokeniser.java:42)
at org.jsoup.parser.TreeBuilder.runParser(TreeBuilder.java:47)
at org.jsoup.parser.TreeBuilder.parse(TreeBuilder.java:41)
at org.jsoup.parser.HtmlTreeBuilder.parse(HtmlTreeBuilder.java:37)
at org.jsoup.parser.Parser.parse(Parser.java:90)
at org.jsoup.Jsoup.parse(Jsoup.java:58)
at myproject.MyIndexer.getTitle(MyIndexer.java:137)
at myproject.MyIndexer.indexDocs(MyIndexer.java:115)
at myproject.MyIndexer.main(MyIndexer.java:80)
答案 0 :(得分:0)
这不应该是原因。 nextIndexOf()
仅使用整数:
int nextIndexOf(CharSequence seq) {
// doesn't handle scanning for surrogates
char startChar = seq.charAt(0);
for (int offset = pos; offset < length; offset++) {
// scan to first instance of startchar:
if (startChar != input[offset])
while(++offset < length && startChar != input[offset]);
if (offset < length) {
int i = offset + 1;
int last = i + seq.length()-1;
for (int j = 1; i < last && seq.charAt(j) == input[i]; i++, j++); /* Line 92 */
if (i == last) // found full sequence
return offset - pos;
}
}
return -1;
}
(我在第92行输入了引发异常的内容)
现在,Java中的int
的范围 -2.147.483.648 到 2.147.483.647 。 65536仅在您使用unsigned short
时不相关(在java中不可用)。
请检查......
int
相反 - char
类型只有16位(这意味着:上限是65535
!)您还可以在调试中运行程序,检查引发exeption后的变量。特别是seq.charAt(j)
和input[i]
的值可能很有趣。