国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java基礎之StringBuffer詳解

發(fā)布時(shí)間:2021-07-06 11:12 來(lái)源:腳本之家 閱讀:0 作者:CoCo的小呆瓜 欄目: 開(kāi)發(fā)技術(shù)

目錄

一、前言

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方法,就能達到最后位置插入的效果

四、長(cháng)度 容量

和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數量不一樣

五、IStringBuffer接口

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

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í),將立刻刪除涉嫌侵權內容。

国产精品毛片无码| 国产激情电影综合在线看| 四虎影视永久在线观看精品| 少妇被躁爽到高潮无码久久| 成年男女免费视频网站| 成人免费在线电影|