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

来源:互联网 发布:九九乘法口诀java运算 编辑:程序博客网 时间:2024/06/06 05:38

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

阅读全文
0 0
原创粉丝点击