Java读取字符串存入数组时如何忽略大小写实现去重
Java 实现字符串忽略大小写判重的解决方案
你当前的实现中使用ArrayList.contains()判断重复,底层依赖String.equals()方法区分大小写比较,因此无法识别大小写不同的同义单词,以下是两种可行的实现方案:
方案1:使用TreeSet实现(推荐)
借助JDK自带的String.CASE_INSENSITIVE_ORDER比较器初始化TreeSet,可自动完成忽略大小写的去重逻辑,且会保留首次录入单词的原始大小写,代码简洁效率更高:
Scanner fileScanner = new Scanner(file); fileScanner.useDelimiter("[^A-Za-z0-9]"); // 指定大小写不敏感的比较规则 TreeSet<String> wordSet = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); while (fileScanner.hasNext()) { String nextWord = fileScanner.next(); // 跳过分隔符切割产生的空字符串 if (nextWord.isEmpty()) { continue; } wordSet.add(nextWord); } // 如有需要可直接转为ArrayList ArrayList<String> words = new ArrayList<>(wordSet);
方案2:基于ArrayList手动遍历判断
如果你必须使用ArrayList存储,可以自行遍历已有元素,通过String.equalsIgnoreCase()做大小写不敏感的重复判断:
Scanner fileScanner = new Scanner(file); fileScanner.useDelimiter("[^A-Za-z0-9]"); ArrayList<String> words = new ArrayList<String>(); while (fileScanner.hasNext()) { String nextWord = fileScanner.next(); if (nextWord.isEmpty()) { continue; } boolean isDuplicate = false; for (String existed : words) { if (existed.equalsIgnoreCase(nextWord)) { isDuplicate = true; break; } } if (!isDuplicate) { words.add(nextWord); } }
- 注意:数据量较大时方案2的判断效率远低于方案1,优先选择TreeSet实现。
内容的提问来源于stack exchange,提问作者Yasser BK
相关产品推荐
相关产品推荐

