我有一段代码已经工作多年,直到今天。调试后,我意识到最后一个令牌没有正确收集。我认为是因为他的长度(超过10k字符)。
代码:
StringTokenizer tokens = new StringTokenizer(myString,"&&&&&&&");
(...)
String s=tokens.nextToken();
//Do something with s
s=tokens.nextToken();
//Do something with s
s=tokens.nextToken();
//Do something with s
//Now it's time of last and biggest token
s=tokens.nextToken(); // --> s does not contain entire string
答案 0 :(得分:4)
您正以错误的方式使用StringTokenizer
。您的标记生成器不会按照预期的那样在"&&&&&&&"
分割,而是在'&'
,因为它只需要分隔符字符串中的一个字符来分隔标记。然后丢弃空令牌,这就是为什么你得到了预期的结果。例如:
StringTokenizer tokens = new StringTokenizer("a&&b&&c", "&&&");
while (tokens.hasMoreTokens()) {
System.out.println(tokens.nextToken());
}
打印:
a
b
c
所以我怀疑你身上有一个&
令牌。如果情况确实如此,我建议使用String.split()
的msaint建议,如果你能负担得起修改旧代码的话。
答案 1 :(得分:1)
API似乎在长度方面没有限制。我试图重现你的情况,但无法成功。我能够从stringtokenizer获得7个Mega字符。您可以先检查字符串,然后尝试拆分,因为 stringtokenizer 是一个遗留类。