您的位置:首页 > 移动开发

java 剑指offer 第二题:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

2017-12-20 15:41 686 查看
**

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐