菜鳥的文本替換-----談StringBuffer 與 String

有一天,菜鳥看到了個題目。

請實現一個函數,將一個字符串中的空格替換成“%20”。例如,當字符串爲We Are Happy.則經過替換之後的字符串爲We%20Are%20Happy.

心想,String對象難道不能用replace方法嗎,比如說。

public class Replace {
    public static void main(String[] args) {
        String thestring= new String("aa bb cc");
        System.out.println("the original thestring is:"+thestring);
        thestring.replace(" ", "%20");//顯然這裏有問題
        System.out.println("the newest thestring is:"+thestring);//顯然這裏有問題
    }
}

可是,它卻得到了這樣的輸出。

the original thestring is:aa bb cc
the newest thestring is:aa bb cc

王德法?原來,
1.String 類是不可改變的,所以你一旦創建了 String 對象,那它的值就無法改變了。【多次修改一般用StringBuffer】;
2. String的replace(),reverse()方法並不會改變String對象本身,只僅僅是新建一個滿足要求的String對象然後返回。

菜鳥很快就明白了,然後把代碼改了一下。

public class Replace {
    public static void main(String[] args) {
        String thestring= new String("aa bb cc");
        System.out.println("the original thestring is:"+thestring);
        System.out.println("the newest thestring is:"+thestring.replace(" ", "%20"));
    }
}

然後終於得到了滿意的輸出。

the original thestring is:aa bb cc
the newest thestring is:aa%20bb%20cc

那麼,在實際題目中能否通過呢?

public class Solution {
    public String replaceSpace(StringBuffer str) {
        return str.toString().replace(" ", "%20");
    	
    }
}

通過啦!!!!

菜鳥:但是,哎呀這StringBuffer 怎麼搞熬?

StringBuffer是可以自由改變內部字符序列內容的類,比String更靈活

StringBuffer 的構造函數可用字符串初始化,內部的“倒轉reverse(),替換replace()”等方法,都是在原對象基礎上的改變,而不是新創建一個對象並返回。

咱們對StringBuffer和String的區別舉個例子吧。

 public static void main(String[] args) {
        StringBuffer thestring= new StringBuffer("aa bb cc");
        System.out.println("the original thestring with StringBuffer is:"+thestring);//輸出爲“aa bb cc”

        System.out.println("the newest thestring with StringBuffer.toString() is:"+thestring.toString().replace(" ", "%20"));//輸出爲“aa%20bb%20cc”

        System.out.println("the StringBuffer.toString().replace() aferward  with StringBuffer is:"+thestring);//輸出爲“aa bb cc”很明顯tosting()是單獨的一個對象

        System.out.println("the newest thestring with StringBuffer is:"+thestring.reverse());////輸出爲“cc bb aa”對象本身被反轉了

        System.out.println("the aferward thestring with StringBuffer is:"+thestring);//輸出爲“cc bb aa”對象本身被反轉了

        String thestring2= new String("aa bb cc");
        System.out.println("the original thestring with String is:"+thestring);//輸出爲“aa bb cc”

        System.out.println("the newest thestring with String is:"+thestring2.replace(" ", "%20"));//輸出爲“aa%20bb%20cc”但是對象本身不會被改變,返回的是一個符合要求的新對象

        System.out.println("the aferward thestring with String is:"+thestring2);//輸出爲“aa bb cc”對象本身並沒有被改變
}

StingBuffer strb=new StringBuffer("這裏是字符串或者字符串對象的引用")
1 public StringBuffer append(String s)
將指定的字符串追加到此字符序列。
2 public StringBuffer reverse()
將此字符序列用其反轉形式取代。
3 public delete(int start, int end)
移除此序列的子字符串中的字符。
4 public insert(int offset, int i)
將 int 參數的字符串表示形式插入此序列中。
5 replace(int start, int end, String str)
使用給定 String 中的字符替換此序列的子字符串中的字符。
6 String substring(int start)
返回一個新的 String,它包含此字符序列當前所包含的字符子序列
7 String substring(int start, int end)
返回一個新的 String,它包含此序列當前所包含的字符子序列
8 String toString()
返回此序列中數據的字符串表示形式。
請注意:String的replace()是內容2內容替換,StringBuffer是腳標到角標之間的替換。String的用的多一些。StringBuffer有reverse()方法,而String沒有。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章