在练习一个字符串替换的例子,遇到下面一个问题,不知道啥情况,求教!!!!

public class StringReplace {
public static void main(String[] args) {
String str = "a b c d";
char[] ch = str.toCharArray();
stringReplace(ch);
System.out.println(ch);
}

//将左边区域空格替换为“%20”
public static void stringReplace(char[] chs){
    if(chs == null || chs.length == 0){
        return;
    }

    int len = 0;
    int num = 0;
    for(len = 0; len < chs.length && chs[len] != 0; len++){
        if(chs[len] == ' '){
            num++;
        }               
    }

    int j = len + 2 * num - 1;
    for(int i = len - 1; i > -1; i--){
        if(chs[i] != ' '){
            chs[j--] = chs[i];
        }
        else {
            chs[j--] = '0';
            chs[j--] = '2';
            chs[j--] = '%';
        }
    }       
}

}

会报错
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 18
at algorithm_demotest.StringReplace.stringReplace(StringReplace.java:33)
at algorithm_demotest.StringReplace.main(StringReplace.java:12)

java.lang.ArrayIndexOutOfBoundsException: 18 数组下标越界错误
chs[j--] 这个j--超出了数组长度

chs[j--] = chs[i];
索引超出数组界限

区域空格替换为“%20”,,你这把空格替换成三个字符,,数组肯定不够用,。。

报错,,很明显,,数组下标越界。

解决放方法:
【1】创建一个新的数组(能够装下你需要插入的字符),,这个可以根据空格多少计算
【2】.。。把信息放在心的数组里,,返回,
【3】main方法接收新的数组即可。

报错是因为你数组下标越界了,但根本原因是你的逻辑出现了问题,你的存储转换后的数组是明显要大于当前的数组的,那么你转换后的数组是不是就要重新定义一个,然后再重新赋值呢?

数组越界了,代码问题,修正一下!!!