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方法接收新的数组即可。
报错是因为你数组下标越界了,但根本原因是你的逻辑出现了问题,你的存储转换后的数组是明显要大于当前的数组的,那么你转换后的数组是不是就要重新定义一个,然后再重新赋值呢?
数组越界了,代码问题,修正一下!!!