当前位置:首页 > 后端开发 > 正文

Java如何遍历单词?

在Java中遍历单词常用 String.split()按空格分割字符串为数组,再循环处理每个元素,或使用 Scannernext()方法逐个读取单词,适用于输入流,正则表达式可处理复杂分隔符,如 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如何遍历单词?  第1张

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

注意

  • 优点:链式调用,易于并行处理大数据。
  • 缺点:性能略低于循环。

关键注意事项

  1. 分隔符选择
    • 简单空格拆分:split("\s+")
    • 包含标点:split("[\s.,;!?]+")
  2. 空字符串过滤:拆分后需检查 word.isEmpty()
  3. 大小写处理:用 word.toLowerCase() 统一小写。
  4. 性能考量
    • 小文本:split()Stream
    • 大文本:StringTokenizerPattern

总结建议

  • 基础场景:用 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.

0