java - 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
你好
解决方案
你的问题不在于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
推荐阅读
- git - 哪些 git 分支指向当前提交?
- apache-spark - Spark - 主题建模没有剩余磁盘空间
- python-3.x - 使用 make_meshgrid() 时如何处理内存错误
- javascript - 卡在立即调用函数 (IIFE) 中
- r - 将图例中的文本与示例代码对齐
- json - 在 Angular 中从 json 获取键和值
- apache-spark - 同一外部表上的 Count(*) 在 spark.sql() 和 hive 中给出不同的值
- java - 关闭连接时收到警告“异常堆栈跟踪:**开始嵌套异常** ...”
- flutter - Flutter TextField,如何在文本字段内部与上方的标签中使用不同的样式
- android - Android Studio:BitmapFactory.decodeFile 上的错误