2 回答
TA贡献1880条经验 获得超4个赞
你只需要一个 26 (s) 的数组int
,因为字母表中只有 26 个字母。在分享代码之前,请务必注意 Javachar
是整型(例如,'a' + 1 == 'b')。该属性很重要,因为它允许您确定数组中的正确偏移量(特别是如果您强制输入为小写)。就像是,
Scanner scan = new Scanner(System.in);
System.out.print("Type text: ");
String str = scan.nextLine();
int[] count = new int[26];
for (int i = 0; i < str.length(); i++) {
char ch = Character.toLowerCase(str.charAt(i)); // not case sensitive
if (ch >= 'a' && ch <= 'z') { // don't count "spaces" (or anything non-letter)
count[ch - 'a']++; // as 'a' + 1 == 'b', so 'b' - 'a' == 1
}
}
for (int i = 0; i < count.length; i++) {
if (count[i] != 0) {
System.out.printf("%c=%d ", 'a' + i, count[i]);
}
}
System.out.println();
如果您确实想查看所有计数为零的字母(对我来说似乎毫无意义),请更改
if (count[i] != 0) {
System.out.printf("%c=%d ", 'a' + i, count[i]);
}
删除if并且只是
System.out.printf("%c=%d ", 'a' + i, count[i]);
TA贡献1772条经验 获得超5个赞
更改str = scan.nextLine();
为str = scan.nextLine().toLowerCase().replaceAll("\\s+","");
.toLowerCase()
是一种使字符串中的每个字符都小写的方法。
.replaceAll()
是一种用另一个字符替换一个字符的方法。在这种情况下,它将空白替换为空。
添加回答
举报