为了账号安全,请及时绑定邮箱和手机立即绑定

在Java中使用数组计算字母频率

在Java中使用数组计算字母频率

梵蒂冈之花 2024-01-25 10:41:07
我有一项作业,通过迭代字符串中的字符来执行字母频率分析。我不确定如何使用数组来存储每个字母的频率。该数组必须按字母顺序排列,并且还存储非字母字符(包括空格)不幸的是我必须使用一个数组来存储频率。在 Java 中完成此任务的最佳方法是什么?
查看完整描述

2 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

使用流的高效方法

Map<Character, Long> freq = Arrays.stream(arr).
                collect(Collectors.groupingBy(Character::charValue, Collectors.counting()));



查看完整回答
反对 回复 2024-01-25
?
桃花长相依

TA贡献1860条经验 获得超8个赞

一种直接的方法是使用2个数组,一个用于存储字符串中出现的字符,区分大小写,另一个用于存储其相应的频率。


两个数组都使用字符串长度的大小进行声明,以下示例代码展示了如何仅使用数组和简单的逻辑来实现您想要的效果。


示例代码


String str = "The array must be in alphabetical order and also store non-alphabetical characters (including spaces)";


char[] charArr = new char[str.length()];

int[] freqArr = new int[str.length()];

int idx = 0;

for (int i = 0; i < str.length(); i++) {

    char c = str.charAt(i);

    boolean isFound = false;

    for (idx = 0; idx < str.length(); idx++) {

        if (freqArr[idx] == 0) {

            break;

        }

        if (c == charArr[idx]) {

            freqArr[idx]++;

            isFound = true;

            break;

        }

    }

    if (!isFound) {

        charArr[idx] = c;

        freqArr[idx]++;

    }

}


//Sort charArr and freqArr arrays

char tempChar;

int tempFreq;

for (int i = 1; i < str.length(); i++) {

    for (int j = i; j > 0; j--) {

        if (charArr[j] < charArr [j - 1]) {

            tempChar = charArr[j];

            charArr[j] = charArr[j - 1];

            charArr[j - 1] = tempChar;


            tempFreq = freqArr[j];

            freqArr[j] = freqArr[j - 1];

            freqArr[j - 1] = tempFreq;

         }

    }

}

打印字母频率


for (int i = 0; i < str.length(); i++) {

    if (freqArr[i] != 0) {

        System.out.printf("%s:%d", charArr[i], freqArr[i]);

        System.out.println();

    }

}

控制台输出


[:13],[(:1],[):1],[-:1],[T:1],[a:13],[b:3],[c:6],[d: 3],[e:8],...


查看完整回答
反对 回复 2024-01-25
  • 2 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信