
本教程详细介绍了如何在Java中实现一个方法,用于统计给定字符串中不重复单词的数量。我们将通过字符串分割、单词标准化(如转换为小写并去除标点)以及使用`ArrayList`来存储和检查单词的唯一性,最终返回独立单词的总数,避免使用如`HashSet`等高级集合类型。
在Java编程中,经常会遇到需要处理文本数据并从中提取特定信息的需求。其中一个常见任务是统计一个字符串中包含多少个独特的单词。例如,对于句子 "A long long time ago, I can still remember",我们希望得到的结果是 8(因为 "long" 出现了两次,但只应计算一次)。本教程将指导您如何构建一个方法来实现这一功能,同时遵循不使用高级集合类型(如 HashSet)的限制,而是利用基础的 ArrayList。
核心问题是区分重复单词和独立单词。一个简单的单词计数器会计算所有出现的单词,而我们需要的是只计算第一次出现的单词。原始问题中明确指出,不允许使用 HashSet 或 HashMap 等高级数据结构,这使得我们必须依赖更基础的集合类,例如 ArrayList。
要解决这个问题,我们可以遵循以下步骤:
立即学习“Java免费学习笔记(深入)”;
下面是一个完整的Java方法,它实现了上述逻辑:
import java.util.ArrayList;
import java.util.List;
public class WordCounter {
/**
* 统计字符串中独立单词的数量。
* 该方法将字符串分割成单词,对单词进行标准化处理(转小写并去除标点),
* 然后使用ArrayList来存储和检查单词的唯一性。
*
* @param s 输入的字符串
* @return 字符串中独立单词的数量
*/
public static int countUniqueWords(String s) {
if (s == null || s.trim().isEmpty()) {
return 0;
}
// 1. 将字符串分割成单词
// 使用正则表达式匹配一个或多个空格作为分隔符
// 这将处理多个空格的情况,并避免生成空字符串
String[] words = s.split("\s+");
List<String> uniqueWords = new ArrayList<>();
for (String word : words) {
// 2. 标准化单词:
// a. 去除单词中的非字母字符(标点符号、数字等)
// replaceAll("[^a-zA-Z]", "") 会移除所有非英文字母字符
// b. 转换为小写,确保大小写不敏感的比较
String cleanedWord = word.replaceAll("[^a-zA-Z]", "").toLowerCase();
// 检查处理后的单词是否为空,例如,如果原始字符串中只有标点符号
if (!cleanedWord.isEmpty()) {
// 3. 存储和检查唯一性
// 如果uniqueWords列表中不包含当前处理后的单词,则将其添加进去
if (!uniqueWords.contains(cleanedWord)) {
uniqueWords.add(cleanedWord);
}
}
}
return uniqueWords.size();
}
public static void main(String[] args) {
String sentence1 = "A long long time ago, I can still remember";
String sentence2 = "Hello world! Hello Java, world!";
String sentence3 = " Only one word ";
String sentence4 = " "; // 空白字符串
String sentence5 = "Java, Java, java.";
System.out.println("Sentence 1: "" + sentence1 + "" -> Unique words: " + countUniqueWords(sentence1)); // 期望输出 8
System.out.println("Sentence 2: "" + sentence2 + "" -> Unique words: " + countUniqueWords(sentence2)); // 期望输出 4 (hello, world, java)
System.out.println("Sentence 3: "" + sentence3 + "" -> Unique words: " + countUniqueWords(sentence3)); // 期望输出 3 (only, one, word)
System.out.println("Sentence 4: "" + sentence4 + "" -> Unique words: " + countUniqueWords(sentence4)); // 期望输出 0
System.out.println("Sentence 5: "" + sentence5 + "" -> Unique words: " + countUniqueWords(sentence5)); // 期望输出 1 (java)
}
}使用上述 main 方法运行代码,您将得到以下输出:
Sentence 1: "A long long time ago, I can still remember" -> Unique words: 8 Sentence 2: "Hello world! Hello Java, world!" -> Unique words: 4 Sentence 3: " Only one word " -> Unique words: 3 Sentence 4: " " -> Unique words: 0 Sentence 5: "Java, Java, java." -> Unique words: 1
通过本教程,我们学习了如何使用Java的基本字符串操作和 ArrayList 来实现一个方法,以统计字符串中独立单词的数量。这个方法通过字符串分割、单词标准化和列表的唯一性检查,有效地解决了在不使用高级集合类的情况下处理文本去重的问题。尽管在处理大规模数据时可能存在性能瓶颈,但它为理解和实现基础的文本处理逻辑提供了一个清晰的范例。
以上就是Java中统计字符串中独立单词的数量的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号