好的,我必须将一个字符串传递给显然存储在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");
}
}
}
答案 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()
,这是一种名称更短的方法,可以为您提供某个位置的角色
您可能不希望在每次循环迭代中打印出上限数量