亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java基礎之StringBuffer詳解

 更新時間:2021年04月26日 16:57:55   作者:CoCo的小呆瓜  
這篇文章主要介紹了Java基礎之StringBuffer詳解,文中有非常詳細的代碼示例,對正在學習java基礎的小伙伴們有非常好的幫助,需要的朋友可以參考下

一、前言

StringBuffer是可變長的字符串

1.append 追加

2.delete 刪除

3.insert 插入

4.reverse 反轉(zhuǎn)

二、用法

String str1 = "let there ";
StringBuffer sb = new StringBuffer(str1); //根據(jù)str1創(chuàng)建一個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這個位置插入 there  在4的位置后面插入
System.out.println(sb);
sb.reverse(); //反轉(zhuǎn)    字符串的內(nèi)容倒序
System.out.println(sb);

三、結果

let there be light let be light let there be light thgil eb ereht tel

注意:

對于插入insert和append

邊界條件判斷

插入之前,首先要判斷的是一些邊界條件,比如插入位置是否合法,插入的字符是否為空

擴容

1.要判斷是否需要擴容,如果插入的字符串加上原來的總長度超過了初始容量,就需要擴容。

2.數(shù)組的長度是固定且不能改變的,所以數(shù)組本身不支持擴容。這時需要其他方式解決問題------------------

根據(jù)需要插入的字符串的長度和已經(jīng)存在的內(nèi)容的長度,計算出一個新的容量,再根據(jù)這個容量創(chuàng)建一個新的數(shù)組,把原來數(shù)組中的內(nèi)容復制到新的數(shù)組中,讓value這個引用指向新的數(shù)組,從而達到擴容的效果。

插入字符串

1.找到要插入字符串的位置,從這個位置開始,把原數(shù)據(jù)看成兩段,把后半段向后挪動一個距離,這個距離剛好是插入字符串的長度。

2.然后把要插入的數(shù)據(jù),插入這個挪出來的,剛剛好的位置里。

修改length的值

最后修改length的值,是原來的值加上插入字符串的長度

insert(int, char)

參數(shù)是字符的insert方法,通過調(diào)用insert(int, String) 也就實現(xiàn)了。

append

追加,就是在最后位置插入。 所以不需要單獨開發(fā)方法,直接調(diào)用insert方法,就能達到最后位置插入的效果

四、長度 容量

和String內(nèi)部是一個字符數(shù)組一樣,StringBuffer也維護了一個字符數(shù)組,但這個數(shù)組留有多余的長度,以便于在現(xiàn)有的數(shù)組上調(diào)用插入和追加,例如

String str = new StringBuffer("the"),//內(nèi)部的字符數(shù)組的長度是19而不是3,如果追加的長度超過了19,就會分配一個新的數(shù)組,長度比原來多,把原來的數(shù)據(jù)復制到新的數(shù)組中,看上去數(shù)組長度就變長了

不同的JDK數(shù)量不一樣

五、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); //從開始位置刪除剩下的
public void delete(int start,int end); //從開始位置刪除結束位置-1
public void reverse(); //反轉(zhuǎn)
public int length(); //返回長度
}

六、value和capacity

value: 用于存放字符數(shù)組

capacity: 容量

無參構造方法: 根據(jù)容量初始化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 類支持的主要方法:

序號  方法描述
1 public StringBuffer append(String s) 將指定的字符串追加到此字符序列。
2 public StringBuffer reverse() 將此字符序列用其反轉(zhuǎn)形式取代。
3 public delete(int start, int end) 移除此序列的子字符串中的字符。
4 public insert(int offset, int i) 將 int 參數(shù)的字符串表示形式插入此序列中。
5 replace(int start, int end, String str) 使用給定 String 中的字符替換此序列的子字符串中的字符。 

**注意:**String 類是不可改變的,所以你一旦創(chuàng)建了 String 對象,那它的值就無法改變了

string1.concat(string2);字符串連接

"我的名字是 ".concat("Runoob");

更常用的是使用'+'操作符來連接字符串,如:

"Hello," + " runoob" + "!"

Java 中 StringBuffer 和 String 是有一定的區(qū)別的,首先,String 是被 final 修飾的,他的長度是不可變的,就算調(diào)用 String 的 concat 方法,那也是把字符串拼接起來并重新創(chuàng)建一個對象,把拼接后的 String 的值賦給新創(chuàng)建的對象,而 StringBuffer 的長度是可變的,調(diào)用StringBuffer 的 append 方法,來改變 StringBuffer 的長度,并且,相比較于 StringBuffer,String 一旦發(fā)生長度變化,是非常耗費內(nèi)存的!

String 長度大小不可變

StringBuffer 和 StringBuilder 長度可變

StringBuffer 線程安全 StringBuilder 線程不安全

StringBuilder 速度快

到此這篇關于Java基礎之StringBuffer詳解的文章就介紹到這了,更多相關java StringBuffer詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用System.exit()來優(yōu)雅地終止SpringBoot項目的代碼示例

    使用System.exit()來優(yōu)雅地終止SpringBoot項目的代碼示例

    System.exit() 方法是 Java 中用于退出程序的方法,它接受一個整數(shù)參數(shù),通常被用來指示程序的退出狀態(tài),本文給大家介紹了如何使用System.exit()來優(yōu)雅地終止SpringBoot項目,需要的朋友可以參考下
    2024-08-08
  • Java基礎-Java基本數(shù)據(jù)類型

    Java基礎-Java基本數(shù)據(jù)類型

    這篇文章主要介紹了Java基礎-Java基本數(shù)據(jù)類型,變量就是申請內(nèi)存來存儲值。也就是說,當創(chuàng)建變量的時候,需要在內(nèi)存中申請空間,下面我們就來對Java基本數(shù)據(jù)類型作簡單的介紹,需要的朋友可以參考一下
    2022-01-01
  • 淺談Java中浮點型數(shù)據(jù)保留兩位小數(shù)的四種方法

    淺談Java中浮點型數(shù)據(jù)保留兩位小數(shù)的四種方法

    今天在進行開發(fā)的過程中遇到了一個小問題,是關于如何將double類型的數(shù)據(jù)保留兩位小數(shù)。具有一定的參考價值,本文就詳細的介紹一下
    2021-09-09
  • Java Objects工具類原理及用法詳解

    Java Objects工具類原理及用法詳解

    這篇文章主要介紹了Java Objects工具類原理及用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot項目中HTTP請求體只能讀一次的解決方案

    SpringBoot項目中HTTP請求體只能讀一次的解決方案

    在基于Spring開發(fā)Java項目時,可能需要重復讀取HTTP請求體中的數(shù)據(jù),例如使用攔截器打印入?yún)⑿畔⒌?但當我們重復調(diào)用getInputStream()或者getReader()時,通常會遇到SpringBoot HTTP請求只讀一次的問題,本文給出了幾種解決方案,需要的朋友可以參考下
    2024-08-08
  • SpringBoot中使用MQTT實現(xiàn)消息的訂閱和發(fā)布(示例代碼)

    SpringBoot中使用MQTT實現(xiàn)消息的訂閱和發(fā)布(示例代碼)

    這篇文章主要介紹了SpringBoot中使用MQTT實現(xiàn)消息的訂閱和發(fā)布的相關知識,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Java精確抽取網(wǎng)頁發(fā)布時間

    Java精確抽取網(wǎng)頁發(fā)布時間

    這篇文章主要為大家詳細介紹了Java精確抽取網(wǎng)頁發(fā)布時間的相關資料,盡量做到精確無誤,感興趣的小伙伴們可以參考一下
    2016-06-06
  • java創(chuàng)建線程池的7種實現(xiàn)方法

    java創(chuàng)建線程池的7種實現(xiàn)方法

    在Java中線程池是一種管理線程的機制,它可以創(chuàng)建一組線程并重復使用它們,避免了創(chuàng)建和銷毀線程的開銷,這篇文章主要給大家介紹了關于java創(chuàng)建線程池的7種實現(xiàn)方法,需要的朋友可以參考下
    2023-10-10
  • Java中的interrupt、interrupted和isInterrupted方法區(qū)別詳解

    Java中的interrupt、interrupted和isInterrupted方法區(qū)別詳解

    這篇文章主要介紹了Java中的interrupt、interrupted和isInterrupted方法區(qū)別詳解,interrupt用于中斷線程,調(diào)用該方法的線程的狀態(tài)將會被設置為中斷狀態(tài),線程中斷僅僅是設置線程的中斷狀態(tài)位,并不會停止線程,需要用戶自己去監(jiān)視線程的狀態(tài)并作出處理,需要的朋友可以參考下
    2023-12-12
  • SpringBoot2自動裝配原理解析

    SpringBoot2自動裝配原理解析

    這篇文章主要介紹了SpringBoot2自動裝配原理解析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03

最新評論