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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wyallen/article/details/78853936

**
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.

猜你喜欢

转载自blog.csdn.net/wyallen/article/details/78853936
今日推荐