这是数组下标越界的问题a~z 的ASCII码是 97~122
A~Z 的ASCII码是 65~90
空格的ASCII码是32
String s = "My Heart Will Go On";
中有大写字母 小写字母 和空格
if(c >= 'a' && c <='z')
if(c >= 'A' && c <= 'Z')
if语句中的 条件判断  有问题   字符之间的比较实际上是int类型的ASCll码的比较

解决方案 »

  1.   

    public static String getLowCount(String s, int n) {
    char arr[] = new char[n];
    int j = 0;//用于数组下标计数
    for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    if (c >= 'a' && c <= 'z') {
    arr[j++] = c;//i --> j++
    }
    }
    String f = new String(arr);
    return f;
    } public static String getUpCount(String s, int n) {
    char arr[] = new char[n];
    int j = 0;//用于数组下标计数
    for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    if (c >= 'A' && c <= 'Z') {
    arr[j++] = c;//i --> j++
    }
    }
    String f = new String(arr);
    return f;
    }
      

  2.   

    2楼大大,能不能再多解释一下?这样写就是j比i多1呗,为啥呢?
     不是的. 
    "My Heart Will Go On" 有19个字符,那么循环时,i 会从0-->18, 但这里只有5个大写字母,10个小写字母。
    以getLowCount(String s, int n)为例,这里的n时10,所以你的数组arr的长度是10(0--9),按楼主的意思,只有碰见小写字母时,才放到arr数组里。按楼主的代码,当 i =0 时,c = 'M', 不保存,下一个;i = 1时,c = 'y',要保存,楼主保存到arr[1]里了, 跳过了arr[0],  所以楼主的代码的在循环10次之前的结果是:arr[1] = ‘y', arr[4] = 'e', arr[5] ='a' ,arr[6] = 'r', arr[7] = 't', 当i = 10时, c = 'i', 这时arr[10]就溢出了。用j计数,正好就每次碰见小写字母时,保存。当i = 1时,arr[0] = 'y', i = 4时,arr[1] = 'e'...