这是数组下标越界的问题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码的比较
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码的比较
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;
}
不是的.
"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'...