Scanner sc = new Scanner(System.in); StringBuffer str = new StringBuffer("We are happy."); //str = modify(str); for (int i =0;i<str.length();i++){ if (str.charAt(i) == ' '){ str.replace(i,0,"%20"); } } System.out.println(str);;为什么出错
时间: 2024-03-08 08:50:50 浏览: 55
第一种方法-java补充知识点
这段代码出错的原因是 `str.replace(i, 0, "%20")` 的使用方式不正确。`replace()` 方法的第一个参数是要替换的字符串的起始位置,第二个参数是要替换的字符串的结束位置(不包括该位置),第三个参数是要替换成的新字符串。在这个代码中,第二个参数为 0,表示不替换任何字符,而第一个参数为 i,就会导致插入 `%20` 后字符串长度增加,从而超出原字符串的范围,出现越界访问的错误。
要想将空格替换成 `%20`,可以使用 `str.replace(i, i+1, "%20")`,这样就可以替换掉空格并保持字符串的长度不变。
修改后的代码如下:
```
Scanner sc = new Scanner(System.in);
StringBuffer str = new StringBuffer("We are happy.");
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
str.replace(i, i+1, "%20");
}
}
System.out.println(str);
```
阅读全文