Java不使用HashMap等结构统计List单词次数并去重、去除标点
实现思路及修改方案
1. 单词标点清理实现
你可以单独写一个辅助方法处理输入的单词,过滤指定标点,不需要用到split方法:
- 先定义需要移除的标点字符串:
String invalidSymbols = ",.:[];=-" - 遍历原单词的每一个字符,只要不在上述标点集合里的字符就保留,拼接成纯净的新单词
- 可额外添加大小写统一逻辑,避免
Hello和hello被判定为不同单词
对应辅助方法代码:
private static String cleanWord(String rawWord) { String invalidSymbols = ",.:[];=-"; StringBuilder sb = new StringBuilder(); for (int i = 0; i < rawWord.length(); i++) { char c = rawWord.charAt(i); // 不在标点集合里的字符就保留 if (invalidSymbols.indexOf(c) == -1) { sb.append(c); } } // 可选:统一转小写,按需开启 // return sb.toString().toLowerCase(); return sb.toString(); }
2. 原有统计逻辑修复
你原有代码存在逻辑错误:numCount.indexOf(word) 是在存储整数的计数列表里查找字符串,永远会返回-1,无法正确获取单词对应的下标。需要替换为从单词列表wordCount中查找下标。
3. 完整可运行代码
import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Scanner; public class WordCount { private static String cleanWord(String rawWord) { String invalidSymbols = ",.:[];=-"; StringBuilder sb = new StringBuilder(); for (int i = 0; i < rawWord.length(); i++) { char c = rawWord.charAt(i); if (invalidSymbols.indexOf(c) == -1) { sb.append(c); } } // 如果不需要区分大小写,打开下面的注释即可 // return sb.toString().toLowerCase(); return sb.toString(); } public static void main(String[] args) throws IOException { // 创建输入流 FileInputStream file = new FileInputStream("Assignment1BData.txt"); Scanner input = new Scanner(file); ArrayList<String> wordList = new ArrayList<>(); ArrayList<Integer> countList = new ArrayList<>(); while (input.hasNext()) { String rawWord = input.next(); // 先清理单词的标点 String cleanWord = cleanWord(rawWord); // 空字符串直接跳过 if (cleanWord.isEmpty()) { continue; } // 判断单词是否已经存在 if (wordList.contains(cleanWord)) { // 从单词列表获取下标,更新计数 int index = wordList.indexOf(cleanWord); countList.set(index, countList.get(index) + 1); } else { wordList.add(cleanWord); countList.add(1); } } input.close(); file.close(); // 输出结果 for (int i = 0; i < wordList.size(); i++) { System.out.println(wordList.get(i) + " = " + countList.get(i)); } } }
上述实现完全符合要求:没有使用任何哈希相关类、没有用到split方法,同时完成了标点清理、单词去重、出现次数统计的需求。
内容的提问来源于stack exchange,提问作者tip_yip
相关产品推荐
相关产品推荐

