上一篇
在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.
