Java字符串替换之StringBuffer和 string有啥区别?(指定字符替换成相应字符串)

今天遇到一道题 :

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

拿到题觉得这不是小儿科嘛

然后发现还是得写几行代码,一个函数 解决不了问题。

这里说一下String和StringBuffer的区别,写代码过程中遇到的问题,首先StringBuffer是使用缓冲区的,本身也是操作字符串的,但与String类不同,String类的内容一旦声明或初始化后是不可改变的,改变的只是其内存的指向,而StringBuffer类的对象内容是可以改变的。所以对字符串的插入、删除、替换操作需要创建一个StringBuffer对象,调用其对应函数实现。

public class Test3 {
    static String string="wo ai ni ";

    public static void main(String[] args) {
        StringBuffer s=new StringBuffer(string);
        System.out.println(function(s));
    }

    public static String  function(StringBuffer  str){
        while (true){
            int a=str.indexOf(" ");
            str.setCharAt(a, '%');
            str.insert(a+1, 20);
            int  b=str.indexOf(" ");
            if (b==-1)
                break;
        }
        return str.toString();
    }

}

一开始写完代码就发现了问题,未判断边界值和索引返回值,导致下标越界错误

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.StringBuffer.setCharAt(StringBuffer.java:255)
    at Test3.function(Test3.java:14)
    at Test3.main(Test3.java:6)

查看代码 发现,如果输入字符串为空或者字符串中不包含要替换的字符那么 索引函数str.indexOf(" ") ,替换函数setCharAt(a, '%')都会报错

所以增加判断语句:

        if (str.length()==0 || str.indexOf(" ")==-1)
        return str.toString();

再次调试发现越界问题解决了。

输出为:

 

最后记录下收获:对字符串的一些改动内容操作 需要 先实例化StringBuffer或StringBuilder对象调用其方法实现。还有就是再遇到同类问题,需要操作下标的时候一定要记得边界值判断,避免下标越界。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值