**
public class Solution {
public String replaceSpace(StringBuffer str) {
首先程序给出的参数是StringBuffer类,那么我首先考虑的是就调用StringBuffer类的相关方法完成操作。
- 方法一
配合StringBuffer 的indexOf方法和replace方法。
但是StringBuffer没有方法来判断str里面是否有空格,所以先转换为字符串判断是否有空格。
public class Solution {
public String replaceSpace(StringBuffer str) {
String result = str.toString();
if(result.contains(" ")){
while(str.indexOf(" ") != str.lastIndexOf(" ")){
int index = str.indexOf(" ");
str.replace(index,index+1,"%20");
}
int index = str.indexOf(" ");
str.replace(index,index+1,"%20");
result = str.toString();
return result;
}else{
return result;
}
}
}
结果为17ms,13012k.
- 方法二
后来发现StringBuffer的indexOf方法找不到时返回值为-1,那么直接使用-1
来做判断代码简单很多。
public class Solution {
public String replaceSpace(StringBuffer str) {
int index = str.indexOf(" ");
while(index != -1){
str.replace(index,index+1,"%20");
index = str.indexOf(" ",index);
}
String result = str.toString();
return result;
}
}
测试通过为18ms,8928k。(不知道时间为什么会变多)
- 方法三
事后查看网上的方法,不调用replace方法实现。
public class Solution {
public String replaceSpace(StringBuffer str) {
int n = str.length();//字符串的长度
int ii = 0;//空格的个数ii
for(int i = 0;i < n;i++){
//检测空格
if(str.charAt(i)==' '){
ii++;
}
}
int nn = 2 * ii + n;//根据空格的个数,得到新数组的长度
int index = nn -1;
char[] ct = new char[nn];//新建数组
while(n > 0){
if(str.charAt(n - 1) != ' '){
//如果不是空格
ct[index--] = str.charAt(n-1);
}
else{
//如果是空格
ct[index--] = '0';
ct[index--] = '2';
ct[index--] = '%';
}
//取下一个字符
n--;
}
return String.valueOf(ct);//将字符数组转为String类型后返回
}
}
测试结果18ms,8744k.