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

Java如何遍历单词?

在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

注意

Java如何遍历单词? 第1张

  • 优点:轻量级,适合遗留系统。
  • 缺点:功能有限,不支持正则表达式。


方法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

注意

Java如何遍历单词? 第2张

Java如何遍历单词? 第3张

  • 优点:精准控制单词定义(如排除数字、邮箱)。
  • 缺点:正则编写复杂,需理解边界符 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。
    • 大文本: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.

0