剑指Offer面试题 - 替换空格

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

解1:使用java自带的str.replace()函数。

public class Solution {
    public String replaceSpace(StringBuffer str) {
    	String str1 = str.toString();
        String str2 = str1.replace(" ","%20");
        return str2;
    }
}

这样写能够通过牛客网的所有测试用例,而且代码看上去很简单。但同时可以看到运行时间和占用内存并不是最优解。

于是翻了翻牛客网里大神们的答案,找到了一个范例:

public class Solution {
    public String replaceSpace(StringBuffer str) {
        if(str==null){
            return null;
        }
        StringBuilder newStr = new StringBuilder();
        for (int i=0;i<str.length();i++){
            if (str.charAt(i)==' '){
                newStr.append('%');
                newStr.append('2');
                newStr.append('0');
            }else{
                newStr.append(str.charAt(i));
            }
        }
        return newStr.toString();
    }
}

加上了if( str==null )以保证程序的健壮性(初学者很容易忽略的一点),同时在对字符串进行操作时使用了Java的StringBuilder类(字符串生成器)。

创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。虽然使用“+”可以达到附加新字符或字符串的目的,但“+”会产生一个新的String实例,会在内存中创建新的字符串对象。如果重复地对字符串进行修改,将极大地增加系统开销。而J2SE 5.0新增了可变的字符序列String-Builder类,大大提高了频繁增加字符串的效率。若要使用StringBuilder最后输出字符串结果,可使用toString()方法。

StringBuilder类常用方法有:

(1)append()方法

str.apend(content)

str : StringBuilder变量名

content : 追加到字符串生成器中的内容,可以是任何类型的数据或者其他对象。

(2)inset(int offset, arg)方法

StringBuilder a = new StringBuilder("Hello");
a.insert(5, " World!");
System.out.println(a.toString());

输出结果:Hello World! 

(3)delete(int start, int end)方法

移除此序列的子字符串中的字符。该子字符串从指定的start处开始,一直到索引end-1处的字符,如果不存在这种字符,则一直到序列尾部。如果start等于end,则不发生任何更改。

StringBuilder a = new StringBuilder("StringBuilder");
a.delete(5, 10);
System.out.println(a.toString());

输出结果:Strinder   (下标6~9处的字符被删除)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值