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

标签 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

最佳答案

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

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

这打印:

a
b
c

所以我怀疑在您的 10k token 中某处有一个 &。如果可能是这种情况,我建议 msaint 的建议,即使用 String.split(),如果您有能力修改旧代码,这是可行的方法。

关于java - StringTokenizer 是否对标记有任何最大长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39362973/

相关文章:

java - 同步方法是否在进入非同步块(synchronized block)时释放锁?

java - 在Java接口(interface)实现中避免使用instanceof

java - StringTokenizer countTokens 可以为零吗?

java - 我想阅读此表格内的内容

java - 如何在 java 中的 if/else 语句之间添加一些内容?

java - 在spring mvc maven项目中添加外部项目

java - 替换 java.util.Date(year,month,day) 的公认方法是什么

java - 如何在 Java 中的 tokenizer 中将 char 转换为 String

sql - 如何在 PL/SQL 中查找字符串中不同字符的数量和名称