Java中如何计算wordList(ArrayList)内单词的字母出现频率?
实现单词列表的字母频率统计
没问题,我来帮你搞定这个字母频率统计的需求~核心逻辑很清晰:先给26个字母各分配一个计数器,遍历所有单词的每个字符,对应字母的计数器加一,最后把计数器转换成要求的Integer类型ArrayList返回。
完整代码实现
import java.util.ArrayList; public class LetterFrequencyCalculator { public ArrayList<Integer> freq(ArrayList<String> wordList) { // 初始化26个字母的计数器,默认都是0 int[] letterCounts = new int[26]; // 逐个处理每个单词 for (String word : wordList) { // 遍历单词里的每一个字符 for (char c : word.toCharArray()) { // 只处理小写字母,如果有大写可以先转小写 if (Character.isLowerCase(c)) { int index = c - 'a'; // 把字符转成0-25的索引 letterCounts[index]++; } // 要是需要兼容大写字母,加上这段就行: // else if (Character.isUpperCase(c)) { // int index = c - 'A'; // letterCounts[index]++; // } } } // 把int数组转成Integer类型的ArrayList ArrayList<Integer> frequencyList = new ArrayList<>(); for (int count : letterCounts) { frequencyList.add(count); } return frequencyList; } // 测试题目里的示例 public static void main(String[] args) { ArrayList<String> testWords = new ArrayList<>(); testWords.add("cat"); testWords.add("dog"); testWords.add("turtle"); LetterFrequencyCalculator calculator = new LetterFrequencyCalculator(); ArrayList<Integer> result = calculator.freq(testWords); System.out.println(result); // 输出和题目示例一致:[1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 3, 1, 0, 0, 0, 0, 0] } }
关键细节说明
- 计数器初始化:用长度26的int数组刚好对应a到z,初始值默认是0,完美匹配每个字母的初始频率。
- 字符索引转换:利用ASCII码的连续性,
c - 'a'能直接把小写字母转换成0-25的数组索引,比如't' - 'a' = 19,对应数组的第20个位置(从0开始),正好对应题目里t出现3次的结果。 - 大小写处理:代码里默认只处理小写字母,如果你的单词列表里有大写字母,可以加上注释里的大写判断逻辑,或者先把整个单词转成小写再处理(比如
word.toLowerCase().toCharArray())。 - 类型转换:因为要求返回Integer类型的ArrayList,所以需要把int数组里的每个元素自动装箱成Integer对象,添加到列表中。
内容的提问来源于stack exchange,提问作者Nancy
相关产品推荐
相关产品推荐

