首页 > 解决方案 > StringTokenizer 只存储第一个令牌?

问题描述

我尝试使用 StringTokenizer 将字符串拆分为标记,但是当我尝试计算或打印标记时,它只包含第一个单词。任何帮助,将不胜感激。

      Scanner s = new Scanner(System.in);
      System.out.println("ENTER STRING:");
      text = s.next();
      StringTokenizer str = new StringTokenizer(text," ");
      System.out.println(str.countTokens());
      while(str.hasMoreTokens())
       { System.out.println(str.nextToken()); }

输出:

输入字符串:您好,欢迎来到 java

1

你好

标签: javastringstringtokenizer

解决方案


你的问题不在于StringTokinizer. 它在这里:

    text = s.next();

您的扫描仪还会在空白处定界。所以上面的行只读取第一个单词,Hi. 这就是为什么分词器只包含这个词的原因。

解决方法是使用nextLine扫描仪的方法。它读取完整的输入行。

StringTokenizer 是遗留的

StringTokenizer是遗留的,仅包含在 Java 中以实现向后兼容性。建议String.split()用于将字符串分隔为标记。

完整示例:

    Scanner s = new Scanner(System.in);
    System.out.println("Enter string:");
    String text = s.nextLine();
    String[] tokens = text.split(" ");
    System.out.println(tokens.length);
    for (String t : tokens) {
        System.out.println(t);
    }

示例会话:

Enter string:
Hi welcome to java
4
Hi
welcome
to
java

推荐阅读