在String中获取正确数量的'a'字符

时间:2014-02-09 01:44:07

标签: java

我正在尝试编写一个小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");
    }
}

6 个答案:

答案 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");
}

根据JavaDocCharacter.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");
    }