如何用Java 8的数组流计算字符串中指定单词的总出现次数?
用Java 8流计算指定单词的频率总和
嘿,刚好能用Java 8的流API轻松搞定你的需求,我给你整理了一个简洁的实现方案:
import java.util.Arrays; import java.util.Set; public class WordFrequencySum { public static void main(String[] args) { String sentence = "The cat has black fur and black eyes"; String[] words = sentence.trim().split("\\s+"); String targetWords = "black cat"; // 将目标单词转换为集合,提升匹配效率 Set<String> targetWordSet = Set.of(targetWords.split("\\s+")); // 利用流统计目标单词的总出现次数 long totalOccurrences = Arrays.stream(words) .filter(targetWordSet::contains) .count(); System.out.println(totalOccurrences); // 输出:3 } }
关键步骤说明:
- 目标单词集合化:把
"black cat"拆分成单词数组后转成Set,这样后续判断单词是否属于目标列表时,contains操作的效率更高(时间复杂度O(1))。 - 流处理统计:将句子拆分后的单词数组转为流,通过
filter筛选出属于目标集合的单词,最后用count()直接得到总出现次数。
如果需要支持大小写不敏感的统计(比如句子中出现"Black"或"CAT"也能被统计),可以稍微修改过滤逻辑:
long totalOccurrences = Arrays.stream(words) .map(String::toLowerCase) .filter(word -> targetWordSet.stream().anyMatch(target -> target.equalsIgnoreCase(word))) .count();
这个版本会把所有单词统一转成小写后再匹配,确保大小写不同的同意思单词也能被统计到。
内容的提问来源于stack exchange,提问作者Juho M
相关产品推荐
相关产品推荐

