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

本文探讨了如何实现将字符串中的空格替换为"%20",并介绍了String、StringBuffer和StringBuilder的区别。在处理字符串修改时,推荐使用StringBuffer或StringBuilder以提高效率。代码示例展示了如何遍历字符串并替换空格,同时分享了对个人成长和抗压能力提升的感悟。
摘要由CSDN通过智能技术生成

1. 题目描述

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

① 题目分析:

  1. 将空格全部替换,并且全部的字符也要输出
  2. 可变字符串,使用StringBuffer处理可变字符串
  3. 遍历所有的字符串,取出字符串中的每一个字符
  4. 判断是空格还是字符,是空格的话执行替换,不是字符的话追加字符
  5. 将字符串一个一个的出来使用的是charAt(i),取出字符的值是String.valueOf(b).equals(" ")

② 知识点补充:String,StringBuffer,StringBuilder

       String,StringBuffer,StringBuilder都是代表字符串。

       String类是不可变类,任何发生对String类的改变都会让String产生一个新的对象。StringBuffer是可变类,任何对StringBuffer的字符串的改变都不会产生新的对象。StringBuffer是String字符串的一个缓冲区,相对于String来说,StringBuffer是可以改变的,StringBuffer是线程安全的。StringBuffer在任何时刻都有一个字符串序列,这个序列和长度可以通过一些函数进行调用和修改。StringBuffer是线程安全的,有几个线程同时操作StringBuffer序列,所有操作串行执行。

      每一个StringBuffer都有一个容量,如果内容的大小不超过容量,StringBuffer就不会分配更大的缓冲区;如果需要更大的容量SringBuffer就会自动添加,StringBuffer是线程安全的,StringBuider不是线程安全的。StringBuffer没有同步,StringBuilder异步的话会更快一点。

      StringBuffer继承了AbstractStringBuffer,在AbstractStringBuffer中,有两种类型,分别是char[]类型的值和int类型的value,也就是说StringBuffer本质上是一个数组:

//value用来存储字符,count用来存储数组中已有内容的大小,也就是数组的长度。 char[] value; int count;

StringBuffer主要的操作有append和insert等等,这些操作都是在value上执行的,而不是String,每次操作都要有一个new一个新的String对象,因此效率上,StringBuffer比String效率高。

String,StringBuffer,StringBuilder之间的区别:

  • 速度上:String<StringBuffer<StringBuilder
  • 安全上:StringBuffer是线程安全的,StringBuilder不是线程安全的
  • String的每次改变都会涉及到字符数组的复制,而SringBuffer和StringBuilder直接在字符数组上改变;

总结:

       如果对字符串的改变少,使用String。如果对字符修改的对一点,需要线程安全的就使用StringBuffer,线程不安全就使用StringBuilder


2. 代码实现

public class Solution {
    public String replaceSpace(StringBuffer str) {
    	/*
        重新定义一个可变的字符串,然后符合条件的放进去
        目的是替换空格,首先要把字符串的内容每一个都遍历
        如果是当前字符是空格的话就替换成%20,不是的话就直接输出
        */
        //代码如下:
        /*
        定义一个空的字符串
        */
        StringBuffer newStr = new StringBuffer();
        //对原数组进行循环遍历,找出空格,条件是字符串的
        for(int i = 0;i < str.toString().length();i++){
            //把字符一个一个取出来
            char b = str.charAt(i);
            //如果字符串的值等于空格的话,在StringBuffer后面追加需要的东西
            if(String.valueOf(b).equals(" ")){
                newStr.append("%20");
            }else{
                //不是空格的话就把b添加进去
                newStr.append(b);
            }
        }
        //返回的是字符串的形式
        return newStr.toString();
    }
}

3.总结

  1. 在编程语言中,修改,删除操作中,操作的话需要先取出来再进行操作。
  2. 空格替换也是一样的道理,先取出来进行判断。
  3. 最近在思考,其实是有点着急的,下年毕业论文就开题,所有的事情一下都忙起来了。告诉自己慢慢积累,慢慢来。
  4. 最近大连理工的研究生不幸离世,感到挺可惜的。搞科研,要做出点成绩,压力是肯定有的。无论人生遇到什么困难,相信自己一定会度过的。记住,自己的命是父母给的,如果不想要,首先打电话问问父母同不同意。
  5. 培养自己的抗压能力,压力大的时候去操场跑步,释放压力。
  6. 很喜欢任正非说的一句话:

            没有伤痕累累,哪来皮糙肉厚,英雄自古多磨难! 苦难的生活,是我人生的最好锻炼,我学会了不少东西,明白了不少事理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值