剑指Offer刷题

二、替换空格(Java版)
今天这道题目对于我来说,收获较大,而且还有很多小问题,也都理解和记住了,下面是这道题的详情。
题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

分析:
1)首先考虑,字符串是可变的,所以采用StringBuffer或者StringBuilder
2)重新创建一个对象,然后遍历原来的字符串(调用charAt方法,获取指定索引位置的字符),依次比较获取的字符是否为空格,为空格则用新对象通过append方法添加“%20”,否则新对象就添加该字符。
3)遍历结束后,再调用toString方法转成字符串
4)不直接定义String类的原因是可变,且需要调用append()方法,所以创建StringBuffer对象
5)这里还应该注意String,StringBuffer与StringBuilder的区别:
a)String内容不可变,另外两个内容可变,且长度可变化;
b)StringBuffer是线程安全,同步,效率低;
c)StringBuilder是非同步,线程不安全,效率高;
d)String类没有append方法
e)StringBuilder 相较于 StringBuffer来说有速度优势,所以大多数情况下建议使用 StringBuilder 类,在要求线程安全的情况下,则必须使用 StringBuffer 类。

题解:
剑指Offer刷题