今天遇到一道题 :
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
拿到题觉得这不是小儿科嘛
然后发现还是得写几行代码,一个函数 解决不了问题。
这里说一下String和StringBuffer的区别,写代码过程中遇到的问题,首先StringBuffer是使用缓冲区的,本身也是操作字符串的,但与String类不同,String类的内容一旦声明或初始化后是不可改变的,改变的只是其内存的指向,而StringBuffer类的对象内容是可以改变的。所以对字符串的插入、删除、替换操作需要创建一个StringBuffer对象,调用其对应函数实现。
public class Test3 {
static String string="wo ai ni ";
public static void main(String[] args) {
StringBuffer s=new StringBuffer(string);
System.out.println(function(s));
}
public static String function(StringBuffer str){
while (true){
int a=str.indexOf(" ");
str.setCharAt(a, '%');
str.insert(a+1, 20);
int b=str.indexOf(" ");
if (b==-1)
break;
}
return str.toString();
}
}
一开始写完代码就发现了问题,未判断边界值和索引返回值,导致下标越界错误
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.StringBuffer.setCharAt(StringBuffer.java:255)
at Test3.function(Test3.java:14)
at Test3.main(Test3.java:6)
查看代码 发现,如果输入字符串为空或者字符串中不包含要替换的字符那么 索引函数str.indexOf(" ") ,替换函数setCharAt(a, '%')都会报错
所以增加判断语句:
if (str.length()==0 || str.indexOf(" ")==-1)
return str.toString();
再次调试发现越界问题解决了。
输出为: