java显示字符串中的字符数
我有一个Java问题:我正在编写一个程序来读取字符串并显示该字符串中的字符数。我找到了一些示例代码,但我不太理解最后一部分-有人能帮忙吗
int[] count = countLetters(line.toLowerCase());
for (int i=0; i<count.length; i++)
{
if ((i + 1) % 10 == 0)
System.out.println( (char) ('a' + i)+ " " + count[i]);
else
System.out.print( (char) ('a' + i)+ " " + count[i]+ " ");
}
public static int[] countLetters(String line)
{
int[] count = new int[26];
for (int i = 0; i<line.length(); i++)
{
if (Character.isLetter(line.charAt(i)))
count[(int)(line.charAt(i) - 'a')]++;
}
return count;
}
# 1 楼答案
最后一个循环是:
对于每个字符,我们测试它是否是一个字母,如果是,我们增加相对于该字符的计数器。也就是说,“a”是0,“b”是1。。。(换句话说,'a'是'a'-'a'是0,'b'是'b'-'a'是1…)
这是计算字符串中字符出现次数的常用方法
# 2 楼答案
我猜你是在计算字母的出现,而不是字符(“5”也是一个字符)
最后一部分:
它遍历输入行并检查每个字符是否为字母。如果是,则增加该字母的计数。计数保存在26个整数的数组中(对于拉丁字母表中的26个字母)。字母“a”的计数保持在索引0,字母“b”保持在1,字母“z”保持在25。为了获得索引,代码从字母值中减去值“a”(每个字符不仅是一个字符/字形,而且是一个数值)。因此,如果字母是‘a’,它减去‘a’的值,该值应为0,依此类推
# 3 楼答案
在方法
countLetters
中,for
循环遍历行中的所有字符。if
检查以确保它是一个字母,否则它将被忽略line.charAt()
在位置i处产生单个字符。其类型为char
现在深入Java内部,char只是一个与字符代码相对应的数字。小写字母“a”的字符代码是97,“b”是98,依此类推
(int)
强制从char
转换为int
。我们取字符代码,假设它是a‘b’,代码是98,我们减去a的代码,它是97,我们得到偏移量1(从字母表的开始)。对于字母表中的任何字母,偏移量将介于0和25之间(包括0和25)因此,我们使用该偏移量作为数组
count
的索引,并使用++
对其进行递增。然后,程序顶部的循环可以打印出计数顶部的循环使用反向“技巧”将从0到25的偏移量转换回从a到z的字母
# 4 楼答案
“最后一部分”,循环的实现真的很难理解。接近模糊;)这里是count方法的重构(分为两种方法,一种是针对所有字符的通用方法,另一种是针对小大写字母的特殊方法):
总体思路:countAll方法只计算所有字符。是的,阵列更大,但在这些维度上,今天没有人关心。优点:我不必测试每个字符。第二个方法只是将感兴趣的区域复制到一个新的(生成的)数组中并返回它
编辑
我还修改了代码,添加了一条不那么友好的评论。谢谢你,邦比
# 5 楼答案
您发布的代码计数的不是字符串的长度,而是小写字符串中出现的字母数
检索了位置
i
处的字符,如果是字母,则返回true
递增索引
character - 'a'
处的计数,这是0
到26
函数的结果是26个整数的数组,其中包含每个字母的计数
计数数组上的for循环每10次计数结束一次打印输出并使用
打印计数所属的字母