- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- Java基礎之StringBuffer詳解
StringBuffer是可變長(cháng)的字符串
1.append 追加
2.delete 刪除
3.insert 插入
4.reverse 反轉
String str1 = "let there "; StringBuffer sb = new StringBuffer(str1); //根據str1創(chuàng )建一個(gè)StringBuffer對象 sb.append("be light"); //在最后追加 System.out.println(sb); sb.delete(4, 10);//刪除4-10之間的字符 不包括4,包括10 System.out.println(sb); sb.insert(4, "there ");//在4這個(gè)位置插入 there 在4的位置后面插入 System.out.println(sb); sb.reverse(); //反轉 字符串的內容倒序 System.out.println(sb);
let there be light let be light let there be light thgil eb ereht tel
注意:
對于插入insert和append
邊界條件判斷
插入之前,首先要判斷的是一些邊界條件,比如插入位置是否合法,插入的字符是否為空
擴容
1.要判斷是否需要擴容,如果插入的字符串加上原來(lái)的總長(cháng)度超過(guò)了初始容量,就需要擴容。
2.數組的長(cháng)度是固定且不能改變的,所以數組本身不支持擴容。這時(shí)需要其他方式解決問(wèn)題------------------
根據需要插入的字符串的長(cháng)度和已經(jīng)存在的內容的長(cháng)度,計算出一個(gè)新的容量,再根據這個(gè)容量創(chuàng )建一個(gè)新的數組,把原來(lái)數組中的內容復制到新的數組中,讓value這個(gè)引用指向新的數組,從而達到擴容的效果。
插入字符串
1.找到要插入字符串的位置,從這個(gè)位置開(kāi)始,把原數據看成兩段,把后半段向后挪動(dòng)一個(gè)距離,這個(gè)距離剛好是插入字符串的長(cháng)度。
2.然后把要插入的數據,插入這個(gè)挪出來(lái)的,剛剛好的位置里。
修改length的值
最后修改length的值,是原來(lái)的值加上插入字符串的長(cháng)度
insert(int, char)
參數是字符的insert方法,通過(guò)調用insert(int, String) 也就實(shí)現了。
append
追加,就是在最后位置插入。 所以不需要單獨開(kāi)發(fā)方法,直接調用insert方法,就能達到最后位置插入的效果
和String內部是一個(gè)字符數組一樣,StringBuffer也維護了一個(gè)字符數組,但這個(gè)數組留有多余的長(cháng)度,以便于在現有的數組上調用插入和追加,例如
String str = new StringBuffer("the"),//內部的字符數組的長(cháng)度是19而不是3,如果追加的長(cháng)度超過(guò)了19,就會(huì )分配一個(gè)新的數組,長(cháng)度比原來(lái)多,把原來(lái)的數據復制到新的數組中,看上去數組長(cháng)度就變長(cháng)了
不同的JDK數量不一樣
public interface IStringBuffer { public void append(String str); //追加字符串 public void append(char c); //追加字符 public void insert(int pos,char b); //指定位置插入字符 public void insert(int pos,String b); //指定位置插入字符串 public void delete(int start); //從開(kāi)始位置刪除剩下的 public void delete(int start,int end); //從開(kāi)始位置刪除結束位置-1 public void reverse(); //反轉 public int length(); //返回長(cháng)度 }
value: 用于存放字符數組
capacity: 容量
無(wú)參構造方法: 根據容量初始化value
public class MyStringBuffer implements IStringBuffer{ int capacity = 16; int length = 0; char[] value; public MyStringBuffer(){ value = new char[capacity]; } @Override public void append(String str) { // TODO Auto-generated method stub } @Override public void append(char c) { // TODO Auto-generated method stub } @Override public void insert(int pos, char b) { // TODO Auto-generated method stub } @Override public void delete(int start) { // TODO Auto-generated method stub } @Override public void delete(int start, int end) { // TODO Auto-generated method stub } @Override public void reverse() { // TODO Auto-generated method stub } @Override public int length() { // TODO Auto-generated method stub return 0; } }
以下是 StringBuffer 類(lèi)支持的主要方法:
**注意:**String 類(lèi)是不可改變的,所以你一旦創(chuàng )建了 String 對象,那它的值就無(wú)法改變了
string1.concat(string2);字符串連接
"我的名字是 ".concat("Runoob");
更常用的是使用'+'操作符來(lái)連接字符串,如:
"Hello," + " runoob" + "!"
Java 中 StringBuffer 和 String 是有一定的區別的,首先,String 是被 final 修飾的,他的長(cháng)度是不可變的,就算調用 String 的 concat 方法,那也是把字符串拼接起來(lái)并重新創(chuàng )建一個(gè)對象,把拼接后的 String 的值賦給新創(chuàng )建的對象,而 StringBuffer 的長(cháng)度是可變的,調用StringBuffer 的 append 方法,來(lái)改變 StringBuffer 的長(cháng)度,并且,相比較于 StringBuffer,String 一旦發(fā)生長(cháng)度變化,是非常耗費內存的!
String 長(cháng)度大小不可變
StringBuffer 和 StringBuilder 長(cháng)度可變
StringBuffer 線(xiàn)程安全 StringBuilder 線(xiàn)程不安全
StringBuilder 速度快
到此這篇關(guān)于Java基礎之StringBuffer詳解的文章就介紹到這了,更多相關(guān)java StringBuffer詳解內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站