计算大写字母

时间:2011-09-26 18:27:44

标签: java

好的,我必须将一个字符串传递给显然存储在args [0]中的main方法。然后计算一个大写字母出现的次数。出于某种原因,我似乎没有正确计算大写的出现次数。这是家庭作业,任何想法?提前谢谢。

package chapter_9;    

public class Nine_Fifteen {

    public static void main(String[] args) {
        int caps = 0;

        for(int i = 0;i < args.length;i++) {
            if (Character.isUpperCase(args[0].codePointCount(i, i))){
                    caps++; 
            }


        System.out.println("There are " + caps + " uppercase letters");

        }
    }
}

3 个答案:

答案 0 :(得分:3)

问题在于您使用String.codePointCount

  

返回此String的指定文本范围内的Unicode代码点数。文本范围从指定的beginIndex开始,并扩展到索引endIndex - 1处的char。因此,文本范围的长度(以字符为单位)为endIndex-beginIndex。文本范围内的不成对代理计为每个代码点。

这不是你想要的 - 你把它传递给Character.isUpperCase,这是不对的。

你肯定需要处理非BMP Unicode吗?如果不是,如果您使用charAt(i)来获取特定索引处的char,则代码可以更加简单。你还希望凯文提到的从0循环到args[0].length()。我建议将args[0]部分提取到一个单独的字符串变量中,以避免混淆:

String text = args[0];
for (int i = 0; i < text.length(); i++) {
    // Check in here
}

我不会为你完成代码,因为它是家庭作业,但希望这足以让你前进。

答案 1 :(得分:2)

args.length是您拥有的args的数量(因此,很可能是1),但您要解析args[0]args[0].length)的长度

另外,使用charAt(i)测试大写。

答案 2 :(得分:0)

  • 检查您的for循环是否真正循环了您认为循环的内容。

  • 请勿使用codePointCount(),这是一种名称更短的方法,可以为您提供某个位置的角色

  • 您可能不希望在每次循环迭代中打印出上限数量