StringBuilder詳解

還是一樣,我們學習StringBuilder 之前先查一下一些定義,先做個簡單的瞭解
在這裏插入圖片描述

首先就是創建Stringbuilder對象

StringBuilder sbuilder =new StringBuilder();

我們來做個簡單的對比:連接字符串

StringBuilder

StringBuilder sbuilder=new StringBuilder();
sbuilder.append("abc");
sbuilder.append("def");
string str=sb.ToString();

String

string s1=“abc”;
string s2=“def”;
string str=s1+s2;

得到的結果相同,但在處理字符串比較多的的時候使用String效率會變低,而StringBuilder會更加適合,那麼我們還是十分有必要去了解StringBuider的


大家想一下,String的連接方式我們知道了,上面也演示了StringBuilder的連接方式,好像和StringBuffer一樣哦,對的確實是。
上面的StringBuilder對應的是StringBuilder的append(String str)/append(Char c)字符串連接方法

StringBuilder  a=new StringBuilder("abc");
a.append('a');
a.append("aaaa");
System.out.println(a);

結果:abcaaaaa


那麼我現在需要把得到的StringBuilder緩衝到Sting字符串中,那麼我們就可以用到StringBuilder給我們提供的一個方法

toString():返回一個與構建起或緩衝器內容相同的字符串

StringBuilder  a=new StringBuilder("abc");
a.append('a');
a.append("aaaa");
//我們的的結果是abcaaaaa
//我們現在給它進行一個緩衝
String as=a.toString();
System.out.println(a);

結果:abcaaaaa


不知道大家有沒有看過龐博的吐槽,我明明是個賣肉夾饃的,你來跟我要一條狗,在這裏我想說難不倒我
在這裏插入圖片描述

因爲StringBuilder給我們提供了appendcodePoint(int cp):追加一個代碼點,並將其轉換爲一個或兩個代碼單元並返回this

大家都知道char和int的對應關係,不知道的可以上網查一下哈

 StringBuilder s = new StringBuilder("aaaaaa");
 s.appendCodePoint(105);
 System.out.println(s);

顯示結果:aaaaaai
這裏大家都打個問好?why?因爲我們int(105)對應的char字符集是小寫的i,所以appendCodePoint方法把105的字符集i添加到StringBuilder的尾部,返回的就是aaaaaai


那麼有一個字符串aaabaaaaa,其中一個b好像不太合適,想把它換成a,額…,好像也可以哦

StringBuilder有個我們提供了一個方法setCharAt(int i, char c):我們可以把這個方法理解爲替換,就是把指定位置的字符替換成自己想要的字符
上代碼:

 StringBuilder s = new StringBuilder("aaabaaaaa");
 s.setCharAt(3,'a');
 System.out.println(s);

顯示結果:aaaaaaaaa
在這裏插入圖片描述


產品經理:這麼叼,那你把那個b給我插回去
我:
在這裏插入圖片描述

不要擔心,在這裏插入圖片描述

StringBuilder的另一個方法派上用場了:
insert(int offset, String str)/insert(int offset, Char c):指定位置之前插入字符或者字符串,哈哈

上代碼:

 StringBuilder s = new StringBuilder("aaabaaaaa");
 s.setCharAt(3,'a');
 s.insert(3,'b');
 System.out.println(s);

結果:aaabaaaaaa


經理:這裏有個字符串,aaabcaaa,bc把它刪了,多不美觀
我:
在這裏插入圖片描述

這裏調用下delete(int startIndex,int endIndex):注意第一個位置開始,第二個是結束,第一個參數包括開始的字符,第二個參數不包含哈

上代碼:

 StringBuilder s = new StringBuilder("aaabcaaa");
 s.delete(3,5);
 System.out.println(s);

結果:aaaaaa


String,StringBuilder對比

  • string本身是不可改變的,它只能賦值一次,每一次改變,都會生成新的對象,然後原有的對象引用新的對象,而每一次生成新對象都會對系統性能產生影響。
  • StringBuilder是可以改變的,每次操作都是對自身對象進行操作,而不是生成新的對象,其所佔空間會隨着內容的增加而擴充,這樣,在做大量的修改操作時,不會因生成大量匿名對象而影響系統性能。StringBuilder的執行效率也是比較高。

原創文章,梳理不足的地方,評論區評論一起解決

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