我正在尝试编写一个小String
句子(在main method
中给出)的程序,并计算大写字符的数量和a的数量。我在第二部分遇到了一些麻烦。
虽然毫无疑问有多种编写程序的方法,但我写了for loops
来追踪String
,并完成我的工作。它适用于计算大写值,但对于a,它将每个字母计为一个。我可能会发疯
public class CountCharacters {
public static void main(String[] args) {
charCount("How many UPPER CASE letters, a's, and 0-9 digits are there in this String?");
}
public static void charCount(String b) {
int upper = 0;
int a = 0;
for (int i = 0; i < b.length(); i++) {
char v = b.charAt(i);
if (Character.isUpperCase(v)) {
upper++;
}
}
for (int i = 0; i < b.length(); i++) {
char t = b.charAt(i);
if (Character.isLetter('a')) {
a++;
}
}
System.out.println("There are " + upper + " upper case letters, and " + a + " lower case a's in the String");
}
}
答案 0 :(得分:3)
因为你正在测试
if(Character.isLetter('a'))
74次。
小写字母'a'每次都是小写字母'a'。 :)
使用
if(t == 'a' || t == 'A')
或
if(Character.toLowerCase(t) == 'a')
我认为前者更有效(更清晰),但两者都很好。
正如评论中所指出的,由于你没有在其他地方使用t
,你可以直接测试角色:
for (int i = 0; i < b.length(); i++) {
if (b.charAt(i) 'a')) {
a++;
}
}
您可以大幅减少代码:
public static void charCount(String b) {
int upper = 0;
int a = 0;
for (int i = 0; i < b.length(); i++) {
char v = b.charAt(i);
if(v == 'a' || v == 'A') {
a++;
}
if(Character.isUpperCase(v)) {
upper++;
}
}
System.out.println("There are " + upper + " upper case letters, and " + a + " lower case a's in the String");
}
根据JavaDoc,Character.isUpperCase(c)
仅对大写字母返回true。
答案 1 :(得分:2)
只需使用正则表达式:
int upper = b.replaceAll("[^A-Z]", "").length();
int a = b.replaceAll("[^a]", "").length();
int digit = b.replaceAll("\\D", "").length();
这些行每次都会用空白替换你不目标的所有字符(因此删除它们),只留下目标字符,当然你使用剩下的长度。< / p>
答案 2 :(得分:1)
看看你的表情:
if (Character.isLetter('a'))
总会评估为真。
你想:
if (Character.isLetter(t))
(另外,您可以静态导入isLetter并丢失方法的字符前缀。)
答案 3 :(得分:0)
isLetter()方法可能有问题。话虽如此,你不需要它。
int upper = 0;
int a = 0;
for (int i = 0; i < b.length(); i++) {
char v = b.charAt(i);
if (Character.isUpperCase(v)) upper++;
if (v == 'A' || v == 'a') a++;
}
答案 4 :(得分:0)
你可以用一个循环来完成 -
public static void charCount(String b) {
int upper = 0;
int a = 0;
for (int i = 0; i < b.length(); i++) {
char v = b.charAt(i);
if (Character.isUpperCase(v)) {
upper++;
}
if (v == 'a' || v =='A') { // <-- check lower OR upper.
a++;
}
}
System.out.println("There are " + upper + " upper case letters, and "
+ a + " lower case a's in the String");
}
答案 5 :(得分:0)
你应该只需要遍历字符串一次:
public static void charCount(String b) {
int upper = 0;
int a = 0;
for (int i = 0; i < b.length(); i++) {
char c = b.charAt(i);
if (Character.isUpperCase(c))
upper++;
if (c == 'a')
a++;
}
System.out.println("There are " + upper + " upper case letters, and " + a + " lower case a's in the String");
}