StringTokenizer在令牌上有任何最大长度吗?

时间:2016-09-07 06:48:54

标签: java stringtokenizer

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

2 个答案:

答案 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 是一个遗留类。