请实现一个函数,将一个字符串中的每个空格替换成“%20”。


##举例:
字符串为:We Are Happy.
则经过替换之后的字符串为:We%20Are%20Happy。


###Tips:
StringBuff用法:
####1.StringBuff的初始化:
StringBuffer s = new StringBuffer();
但是这样产生的是空对象需要在括号内添加所需内容,如:StringBuffer s = new StringBuffer("abd");

####2.StringBuff的用法:
  A.append()方法,如:
            StringBuffer sb = new StringBuffer(“abc”);
            sb.append(true);
则对象sb的值将变成”abctrue”。

  B.deleteCharAt()方法,如:
            StringBuffer sb = new StringBuffer(“TestString”);
            sb. deleteCharAt(1);
该代码的作用删除字符串对象sb中索引值为1的字符,也就是删除第二个字符,剩余的内容组成一个新的字符串。所以对象sb的值变为”Tst”

  C.delete(int start,int end)方法,如:
            StringBuffer sb = new StringBuffer(“TestString”);
            sb. delete (1,4);
该代码的作用是删除索引值1(包括)到索引值4(不包括)之间的所有字符,剩余的字符形成新的字符串。则对象sb的值是”TString”。

  D.insert(int offset, boolean b)方法,如:
            StringBuffer sb = new StringBuffer(“TestString”);
            sb.insert(4,false);
该示例代码的作用是在对象sb的索引值4的位置插入false值,形成新的字符串,则执行以后对象sb的值是”TestfalseString”。

  E.reverse()方法,如:
            StringBuffer sb = new StringBuffer(“abc”);
            sb.reverse();
经过反转以后,对象sb中的内容将变为”cba”。

  F.setCharAt(int index, char ch)方法,如:
            StringBuffer sb = new StringBuffer(“abc”);
            sb.setCharAt(1,’D’);
则对象sb的值将变成”aDc”。

  G.trimToSize()方法,该方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费。

####3. String和StringBuffer的相互转换
`public class StringBufferTest {

public static void main(String[] args) {

    // String -- StringBuffer
    String s = "hello";           
    // StringBuffer sb = "hello"; //错误的,注意:不能把字符串的值直接赋值给StringBuffer
    // StringBuffer sb = s;       //错误的

    // 方式1:通过构造方法
    StringBuffer sb = new StringBuffer(s);
    System.out.println("sb:" + sb);    //sb:hello


    // 方式2:通过append()方法
    StringBuffer sb2 = new StringBuffer();
    sb2.append(s);
    System.out.println("sb2:" + sb2);  //sb2:hello

    //---------------------------------------------------

    // StringBuffer -- String
    StringBuffer buffer = new StringBuffer("java");
    // String(StringBuffer buffer)
    // 方式1:通过构造方法
    String str = new String(buffer);
    System.out.println("str:" + str);  //str:java


    // 方式2:通过toString()方法
    String str2 = buffer.toString();
    System.out.println("str2:" + str2);//str2:java

}

}`

###拓展(String,StringBuffer与StringBuilder的区别)

  • String 字符串常量
  • StringBuffer 字符串变量(线程安全)
  • StringBuilder 字符串变量(非线程安全)
    String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象.在大部分情况下 StringBuffer > String

##思路
1.将stringbuff类型str转换成string类型,再用其方法replaceAll()
2.是先将其转化为string类型后用toCharArray() 方法将字符串转换为字符数组在循环到空格后添加%20.


代码如下:

public class Solution {
    public String replaceSpace(StringBuffer str) {
        String s=str.toString();
        s=s.replaceAll(" ","%20");
        return s;
    }
}
public class Solution {
    public String replaceSpace(StringBuffer str) {
        String str1=str.toString();
        StringBuffer buffer=new StringBuffer();
        char[] chars=str1.toCharArray();
        for(int i=0;i<chars.length;i++){
            if(chars[i]==' '){
                buffer.append("%20");
            }else{
                buffer.append(chars[i]);
            }
        }
         return buffer.toString();
    }
}