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()
,如果你有能力修改你的旧代码,那就是要走的路。
我有一段代码已经工作多年直到今天。调试后我意识到它没有正确收集最后一个标记。我认为是因为他的长度(超过 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()
,如果你有能力修改你的旧代码,那就是要走的路。