我的作业问题之一是


  定义一个名为countAll的方法,该方法接受String作为参数。该方法必须
  返回大小为27的int数组,以便位置0的值是对
  输入中的“ a”和“ A”字符,位置1的值是“ b”和“
  输入中的“ B”字符,…位置25的值是输入中“ z”和“ Z”字符数的计数,位置26的值是所有非字母字符的计数
  输入中的字符。


我试图用解决

public static int[] countAll(String input){
        int[] ints = new int[27];
        for(int i=0;i<input.length();i++){
                if(input.charAt(i)=='a'||input.charAt(i)=='A'){
                    ints[0]+=1;
                }
                if(input.charAt(i)=='B'||input.charAt(i)=='b'){
                    ints[1]++;
                }
                if(input.charAt(i)=='c'||input.charAt(i)=='C'){
                    ints[2]++;
                }
                if(input.charAt(i)=='d'||input.charAt(i)=='D'){
                    ints[3]++;
                }
                if(input.charAt(i)=='e'||input.charAt(i)=='E'){
                    ints[4]++;
                }
                if(input.charAt(i)=='f'||input.charAt(i)=='F'){
                    ints[5]++;
                }
                if(input.charAt(i)=='g'||input.charAt(i)=='G'){
                    ints[6]++;
                }
                if(input.charAt(i)=='h'||input.charAt(i)=='H'){
                    ints[7]++;
                }
                if(input.charAt(i)=='I'||input.charAt(i)=='i'){
                    ints[8]++;
                }
                if(input.charAt(i)=='j'||input.charAt(i)=='J'){
                    ints[9]++;
                }
                if(input.charAt(i)=='K'||input.charAt(i)=='k'){
                    ints[10]++;
                }
                if(input.charAt(i)=='l'||input.charAt(i)=='L'){
                    ints[11]++;
                }
                if(input.charAt(i)=='m'||input.charAt(i)=='M'){
                    ints[12]++;
                }
                if(input.charAt(i)=='n'||input.charAt(i)=='N'){
                    ints[13]++;
                }
                if(input.charAt(i)=='o'||input.charAt(i)=='O'){
                    ints[14]++;
                }
                if(input.charAt(i)=='p'||input.charAt(i)=='P'){
                    ints[15]++;
                }
                if(input.charAt(i)=='q'||input.charAt(i)=='Q'){
                    ints[16]++;
                }
                if(input.charAt(i)=='r'||input.charAt(i)=='R'){
                    ints[17]++;
                }
                if(input.charAt(i)=='s'||input.charAt(i)=='S'){
                    ints[18]++;
                }
                if(input.charAt(i)=='T'||input.charAt(i)=='t'){
                    ints[19]++;
                }
                if(input.charAt(i)=='U'||input.charAt(i)=='u'){
                    ints[20]++;
                }
                if(input.charAt(i)=='V'||input.charAt(i)=='v'){
                    ints[21]++;
                }
                if(input.charAt(i)=='W'||input.charAt(i)=='w'){
                    ints[22]++;
                }
                if(input.charAt(i)=='x'||input.charAt(i)=='X'){
                    ints[23]++;
                }
                if(input.charAt(i)=='y'||input.charAt(i)=='Y'){
                    ints[24]++;
                }
                if(input.charAt(i)=='z'||input.charAt(i)=='Z'){
                    ints[25]++;
                }

            }
        return ints;
    }

}


但这是解决问题的不切实际的方法。

所以我想知道如何缩短for循环内的代码,以及如何解决具有特殊字符的部分。

最佳答案

使用char值的数字表示来简化。 Google为任何ASCII table查找这些值。

a-z(小写)是97-122。

因此,首先将字符串转换为所有小写字母,例如:

if(charVal >= 97 && charVal <= 122){
    ints[charVal - 97]++;
    // The -97 gives you an array index of 0 through 25.
}
else {
    // Otherwise it's not a-z.
    ints[26]++;
}

07-26 05:32
查看更多