当前位置: 代码迷 >> J2SE >> 一个算法题 ,倒数第4行,改成length=9就会报错, 8就不会完全正确,很奇怪?多谢
  详细解决方案

一个算法题 ,倒数第4行,改成length=9就会报错, 8就不会完全正确,很奇怪?多谢

热度:68   发布时间:2016-04-23 20:43:16.0
求助一个算法题 ,倒数第4行,改成length=9就会报错, 8就不会完全正确,很奇怪?谢谢
求助一个算法题 ,倒数第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();
    }
  相关解决方案