当前位置: 首页 > 知识库问答 >
问题:

如何在java中打印字符的频率

支阳波
2023-03-14

我对Java相当陌生,我想打印字符串中字符的频率(“过滤”)。我将输入过滤到只剩下“az”数组中的字符的位置。在我看来,这应该行得通,但我显然做错了什么,因为我要么收到错误消息(“超出范围”),要么就是打印的值不正确。

char [] az = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
              'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1',
              '2', '3', '4', '5', '6', '7', '8', '9', ' '};
int [] freq = new int [37];
char c;
for (int i=0; i<37; i++) {
  c = filtered.charAt(i);
  if (c == az[i])
    freq[c]++;
}

System.out.println("char"+"\t"+"freq");

for (int i=0; i<37; i++) {
  System.out.println("   "+i+"\t     "+freq[i]);

共有2个答案

孟正志
2023-03-14

我纠正了代码的逻辑,这是错误的,即使没有抛出异常。

String filtered = "would you meet me at 3 in the morning";
char[] az = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
                'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
                'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8',
                '9', ' ' };
int[] freq = new int[az.length];
char c;
for (int i = 0; i < filtered.length() ; i++) {
    c = filtered.charAt(i);
    if (c == ' ')
        freq[az.length - 1]++;
    else if (Character.isAlphabetic(c))
        freq[c - 'a']++;
    else 
        freq[c - '0' + 26]++;
}

for (int i = 0; i < az.length; i++) 
    System.out.println("   " + az[i] + "\t     " + freq[i]);

以下是你的错误:

  • 您硬编码了循环的边界,这不是一个好主意
  • 您将每个az[i]与每个c=filtered进行了比较。charAt(i)但c不一定在索引i处
滕夜洛
2023-03-14

你在混合索引。下面是一个未优化的代码修复程序。

您可以看到如何不命名变量ci。。。帮助避免错误。

char[] az = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
        'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1',
        '2', '3', '4', '5', '6', '7', '8', '9', ' '};
int[] freq = new int[az.length];
for(int filteredIndex = 0; filteredIndex < filtered.length(); ++filteredIndex) {
    char filteredCharacter = filtered.charAt(filteredIndex);
    for (int azIndex = 0; azIndex < az.length; azIndex++) {
        if (filteredCharacter == az[azIndex])
            freq[azIndex]++;
    }
}

System.out.println("char" + "\t" + "freq");

for (int azIndex = 0; azIndex < 37; azIndex++) {
    System.out.println("   " + az[azIndex] + "\t     " + freq[azIndex]);
}
 类似资料:
  • 问题内容: 当我有一个字符串,如: 使用时,如何让Java打印实际的转义字符(而不将其解释为转义字符)? 例如,打电话时 我想看看: 并不是: 我希望看到用于调试目的的实际转义符。 问题答案: 一种方法是: 然后你跑了。

  • 问题内容: 我曾尝试打印它,但由于它是转义字符,因此只是通过而已。例如,输出应如下。 提前致谢 问题答案: 为此以及将来的参考:

  • 问题内容: 有谁知道如何在Java中检测可打印字符? 一段时间(试用/错误)后,我得到了这种方法: 我通过KeyListener获取输入,然后按Ctr-“键”打印一个正方形。有了这个功能似乎还足够。 我在这里缺少一些字符吗? 问题答案: 看来这是“字体”的独立方式。

  • 问题内容: 我正在编写一个程序,该程序将以字符串形式输出唯一字符(通过扫描仪输入)。我创建了一个方法来尝试实现此目的,但我一直在获取不重复的字符,而不是字符串中唯一的一个(或多个)字符。我只想要唯一的字母。 这是我的代码: 这是上面代码的示例输出: 预期的输出将是: 问题答案: 根据所需的输出,当以后重复时,必须替换最初已经添加的字符,因此:

  • 问题内容: 我正在尝试使用面向x86 GNU / Linux体系结构的 NASM 打印单个字符或数字。 这是我正在使用的代码: 但是,运行此代码不会打印任何内容。我究竟做错了什么? 问题答案: 应该包含一个指向char缓冲区开始的指针。因此,您必须将缓冲区存储在内存中。您可以执行以下操作: 您可以或其他任何地址(如果可以的话)覆盖堆栈中的所有内容。 或者,您可以使用一个字符数组来代替即时存储。 制

  • 我想打印一个字符串作为valuei尝试遵循宏[2]和“set”[1]选项,但仍然没有运气; [1] 我怎样才能使我的速度测试版打印像;?