如何在数组中使用ASCII

时间:2015-11-13 21:54:34

标签: java

我想编写一个带字符串文本的程序,用英文计算每个字母的外观并将它们存储在数组中。并打印出如下结果:

java test abaacc
a:***
b:*
c:**

* - 这封信出现的时间很多。

public static void main (String[] args)  {
   String input = args[0];
   char [] letters = input.toCharArray();
   System.out.println((char)97);
   String a = "a:";
   for (int i=0; i<letters.length; i++) {
      int temp = letters[i];
      i = i+97;
      if (temp == (char)i) {
         temp = temp + "*";
      }
      i = i - 97;
   }
   System.out.println(temp);
}

1 个答案:

答案 0 :(得分:2)

编写(char)97会降低代码的可读性。使用'a'

正如3kings在评论中所说,你需要一个26个计数器的数组,每个字母对应一个英文字母。

您的代码也应该处理大写和小写字母。

private static void printLetterCounts(String text) {
    int[] letterCount = new int[26];
    for (char c : text.toCharArray())
        if (c >= 'a' && c <= 'z')
            letterCount[c - 'a']++;
        else if (c >= 'A' && c <= 'Z')
            letterCount[c - 'A']++;
    for (int i = 0; i < 26; i++)
        if (letterCount[i] > 0) {
            char[] stars = new char[letterCount[i]];
            Arrays.fill(stars, '*');
            System.out.println((char)('a' + i) + ":" + new String(stars));
        }
}

测试

printLetterCounts("abaacc");
System.out.println();
printLetterCounts("This is a test of the letter counting logic");

输出

a:***
b:*
c:**

a:*
c:**
e:****
f:*
g:**
h:**
i:****
l:**
n:**
o:***
r:*
s:***
t:*******
u:*