StringTokenizer 是否对标记有任何最大长度?

Does StringTokenizer have any max length on tokens?

我有一段代码已经工作多年直到今天。调试后我意识到它没有正确收集最后一个标记。我认为是因为他的长度(超过 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

API好像没有长度限制。我试图重现你的案例,但没有成功。我能够从 stringtokenizer 获得 7 个 Mega 字符。您可以先检查您的字符串,然后尝试 split,因为 stringtokenizer 是遗留的 class。

您使用 StringTokenizer 的方式有误。您的分词器并没有像人们预期的那样在 "&&&&&&&" 处拆分,而是在 '&' 处拆分,因为它只需要分隔符字符串中的一个字符来分隔标记。然后它会丢弃空标记,这就是您无论如何都会得到预期结果的原因。例如:

    StringTokenizer tokens = new StringTokenizer("a&&b&&c", "&&&");
    while (tokens.hasMoreTokens()) {
        System.out.println(tokens.nextToken());
    }

这会打印:

a
b
c

所以我怀疑在您的 10k 代币中某处有一个 &。如果可能是这种情况,我建议 msaint 的建议,使用 String.split(),如果你有能力修改你的旧代码,那就是要走的路。