我是Java编程的新手,我正在编写代码以用%20
替换字符串中的空格并返回最终的字符串。这是问题的代码。因为我是编程新手,请告诉我我做错了什么。对不起,我的英语不好。
package Chapter1;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Problem4 {
public char[] replaceSpaces(char[] str_array, int length)
{
int noOfSpaces=0,i,newLength;
for(i=0;i<length;i++)
{
if(str_array[i]==' ')
{
noOfSpaces++;
}
newLength = length + noOfSpaces * 2;
str_array[newLength]=' ';
for(i=0;i<length-1;i++)
{
if(str_array[i]==' ')
{
str_array[newLength-1]='0';
str_array[newLength-2]='2';
str_array[newLength-3]='%';
newLength = newLength-3;
}
str_array[newLength-1]=str_array[i];
newLength = newLength - 1;
}
}
return str_array;
}
public static void main(String args[])throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please enter the string:");
String str = reader.readLine();
char[] str_array = str.toCharArray();
int length = str.length();
Problem4 obj = new Problem4();
char[] result = obj.replaceSpaces(str_array, length);
System.out.println(result);
}
}
但是我收到以下错误:
Please enter the string:
hello world
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11
at Chapter1.Problem4.replaceSpaces(Problem4.java:19)
at Chapter1.Problem4.main(Problem4.java:46)
如何使用String.replaceAll()
:
String str = reader.readLine();
str = str.replaceAll(" ", "02%");
此处的示例代码
编辑:
问题出在第 19 行:
str_array[newLength]=' ';//<-- newLength exceeds the char array size
这里的数组是静态的,即大小是固定的,你可以使用 StringBuilder
、StringBuffer
等来构建新的字符串,而不必担心这种小操作的大小。
假设你想看看你在实现你的方法时犯了什么错误,而不是寻找一个完全不同的方法:
(1) 如前所述,一旦分配了数组,就无法更改其大小。 您的方法将str_array
作为参数,但生成的数组可能会大于 str_array
。 因此,由于 str_array
的长度无法更改,因此您需要分配一个新数组来保存结果,而不是使用 str_array
。 您已经正确计算了newLength
;分配该大小的新数组:
char[] resultArray = new char[newLength];
(2)正如 Elliott 指出的,Java 字符串不需要