1. 题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
① 题目分析:
- 将空格全部替换,并且全部的字符也要输出
- 可变字符串,使用StringBuffer处理可变字符串
- 遍历所有的字符串,取出字符串中的每一个字符
- 判断是空格还是字符,是空格的话执行替换,不是字符的话追加字符
- 将字符串一个一个的出来使用的是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.总结
- 在编程语言中,修改,删除操作中,操作的话需要先取出来再进行操作。
- 空格替换也是一样的道理,先取出来进行判断。
- 最近在思考,其实是有点着急的,下年毕业论文就开题,所有的事情一下都忙起来了。告诉自己慢慢积累,慢慢来。
- 最近大连理工的研究生不幸离世,感到挺可惜的。搞科研,要做出点成绩,压力是肯定有的。无论人生遇到什么困难,相信自己一定会度过的。记住,自己的命是父母给的,如果不想要,首先打电话问问父母同不同意。
- 培养自己的抗压能力,压力大的时候去操场跑步,释放压力。
- 很喜欢任正非说的一句话:
没有伤痕累累,哪来皮糙肉厚,英雄自古多磨难! 苦难的生活,是我人生的最好锻炼,我学会了不少东西,明白了不少事理。