上一篇
Java如何遍历单词?
- 后端开发
- 2025-07-01
- 3
在Java中遍历单词常用
String.split()
按空格分割字符串为数组,再循环处理每个元素,或使用
Scanner
的
next()
方法逐个读取单词,适用于输入流,正则表达式可处理复杂分隔符,如
split("\s+")
匹配连续空格。
方法1:使用 split()
分割字符串
原理:通过正则表达式按空格、标点等分隔符拆分字符串。
String text = "Hello, world! This is a sample text."; String[] words = text.split("\s+"); // 按空格拆分(忽略多个连续空格) // 遍历单词数组 for (String word : words) { // 移除单词前后的标点(可选) word = word.replaceAll("[^a-zA-Z]", ""); if (!word.isEmpty()) { System.out.println(word); } }
输出:
Hello
world
This
is
a
sample
text
注意:
- 优点:代码简洁,适合简单场景。
- 缺点:需手动处理标点符号,正则表达式性能略低。
方法2:使用 StringTokenizer
(旧版API)
原理:通过指定分隔符逐词解析字符串(Java早期方案)。
String text = "Java programming is powerful!"; StringTokenizer tokenizer = new StringTokenizer(text, " ,.!?"); // 指定分隔符 while (tokenizer.hasMoreTokens()) { String word = tokenizer.nextToken(); System.out.println(word); }
输出:
Java
programming
is
powerful
注意:
- 优点:轻量级,适合遗留系统。
- 缺点:功能有限,不支持正则表达式。
方法3:使用正则表达式匹配(Pattern
+ Matcher
)
原理:通过正则精确匹配单词边界(推荐处理复杂文本)。
import java.util.regex.*; String text = "Email: user@example.com; Count: 123."; Pattern pattern = Pattern.compile("\b[a-zA-Z]+\b"); // 匹配纯字母单词 Matcher matcher = pattern.matcher(text); while (matcher.find()) { String word = matcher.group(); System.out.println(word); }
输出:
Email
user
example
com
Count
注意:
- 优点:精准控制单词定义(如排除数字、邮箱)。
- 缺点:正则编写复杂,需理解边界符
b
。
方法4:Java 8+ 的 Stream
API
原理:结合 split()
和流式操作,支持函数式编程。
String text = "Learn Java Stream API"; Arrays.stream(text.split("\s+")) .map(word -> word.replaceAll("[^a-zA-Z]", "")) .filter(word -> !word.isEmpty()) .forEach(System.out::println);
输出:
Learn
Java
Stream
API
注意:
- 优点:链式调用,易于并行处理大数据。
- 缺点:性能略低于循环。
关键注意事项
- 分隔符选择:
- 简单空格拆分:
split("\s+")
- 包含标点:
split("[\s.,;!?]+")
- 简单空格拆分:
- 空字符串过滤:拆分后需检查
word.isEmpty()
。 - 大小写处理:用
word.toLowerCase()
统一小写。 - 性能考量:
- 小文本:
split()
或Stream
。 - 大文本:
StringTokenizer
或Pattern
。
- 小文本:
总结建议
- 基础场景:用
split()
快速实现。 - 复杂文本:选正则匹配(
Pattern
/Matcher
)。 - 现代Java开发:优先使用
Stream API
。 - 兼容旧系统:
StringTokenizer
作为备选。
引用说明:本文代码示例基于Oracle官方Java文档[^1]和正则表达式标准(IEEE Std 1003.1)[^2],实践时请根据JDK版本调整语法。
[^1]: Oracle, “Java String Documentation”, 2025.
[^2]: IEEE, “Regular Expression Standards”, POSIX.1-2017.