我想编写一个带字符串文本的程序,用英文计算每个字母的外观并将它们存储在数组中。并打印出如下结果:
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);
}
答案 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:*