求助一个算法题 ,倒数第4行,改成length=9就会报错, 8就不会完全正确,很奇怪?谢谢
public class Test14 {
public void replaseSpaces(char[] str, int length) {
int spaceCount = 0, newLength = 0, i = 0;
for(i = 0; i < length; i++) {
if (str[i] == ' ')
spaceCount++;
}
newLength = length + (spaceCount * 2);
str[newLength] = '\0';
for(i = length - 1; i >= 0; i--) {
if (str[i] == ' ') {
str[newLength - 1] = '0';
str[newLength - 2] = '2';
str[newLength - 3] = '%';
newLength = newLength - 3;
}
else {
str[newLength - 1] = str[i];
newLength = newLength - 1;
}
}
System.out.println(str);
}
public static void main(String[] args) {
Test14 tst = new Test14();
char[] ch = {'t', 'h', 'e', ' ', 'd', 'o', 'g', 'k', 'm', 'c', ' ', ' '};
int length = 8; //改成9就会报错
tst.replaseSpaces(ch, length);
}
}
------解决方案--------------------
改成10
newLength = length + (spaceCount * 2);----> 这个是12
str[newLength] = '\0'; str 中12 个元素 下标0开始 ,最大11
你 给下标 12 赋值,就越界了。
------解决方案--------------------
如果你只是想replace的话,完全可以用String.replace()方法,
java不是c,很多东西封装了能用就直接用.
public void replaseSpaces(char[] ch, int length) {
if (length > ch.length)
length = ch.length;
String s = new String(ch, 0, length).replace(" ", "%20");
System.out.println(s);
// 如果想返回char[] 把下面放开就可以了
// return s.toCharArray();
}