av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java基礎(chǔ)之StringBuffer詳解

瀏覽:44日期:2022-08-13 14:25:45
一、前言

StringBuffer是可變長(zhǎng)的字符串

1.append 追加

2.delete 刪除

3.insert 插入

4.reverse 反轉(zhuǎn)

二、用法

String str1 = 'let there ';StringBuffer sb = new StringBuffer(str1); //根據(jù)str1創(chuàng)建一個(gè)StringBuffer對(duì)象sb.append('be light'); //在最后追加System.out.println(sb);sb.delete(4, 10);//刪除4-10之間的字符 不包括4,包括10System.out.println(sb);sb.insert(4, 'there ');//在4這個(gè)位置插入 there 在4的位置后面插入System.out.println(sb);sb.reverse(); //反轉(zhuǎn) 字符串的內(nèi)容倒序System.out.println(sb);三、結(jié)果

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

注意:

對(duì)于插入insert和append

邊界條件判斷

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

擴(kuò)容

1.要判斷是否需要擴(kuò)容,如果插入的字符串加上原來(lái)的總長(zhǎng)度超過(guò)了初始容量,就需要擴(kuò)容。

2.數(shù)組的長(zhǎng)度是固定且不能改變的,所以數(shù)組本身不支持?jǐn)U容。這時(shí)需要其他方式解決問(wèn)題------------------

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

插入字符串

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

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

修改length的值

最后修改length的值,是原來(lái)的值加上插入字符串的長(zhǎng)度

insert(int, char)

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

append

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

四、長(zhǎng)度 容量

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

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

不同的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); //從開(kāi)始位置刪除剩下的public void delete(int start,int end); //從開(kāi)始位置刪除結(jié)束位置-1public void reverse(); //反轉(zhuǎn)public int length(); //返回長(zhǎng)度}六、value和capacity

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

capacity: 容量

無(wú)參構(gòu)造方法: 根據(jù)容量初始化value

public class MyStringBuffer implements IStringBuffer{int capacity = 16;int length = 0;char[] value;public MyStringBuffer(){ value = new char[capacity];} @Overridepublic void append(String str) { // TODO Auto-generated method stub } @Overridepublic void append(char c) { // TODO Auto-generated method stub } @Overridepublic void insert(int pos, char b) { // TODO Auto-generated method stub } @Overridepublic void delete(int start) { // TODO Auto-generated method stub } @Overridepublic void delete(int start, int end) { // TODO Auto-generated method stub } @Overridepublic void reverse() { // TODO Auto-generated method stub } @Overridepublic int length() { // TODO Auto-generated method stub return 0; }}

以下是 StringBuffer 類支持的主要方法:

序號(hào) 方法描述 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 對(duì)象,那它的值就無(wú)法改變了

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

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

更常用的是使用’+’操作符來(lái)連接字符串,如:

'Hello,' + ' runoob' + '!'

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

String 長(zhǎng)度大小不可變

StringBuffer 和 StringBuilder 長(zhǎng)度可變

StringBuffer 線程安全 StringBuilder 線程不安全

StringBuilder 速度快

到此這篇關(guān)于Java基礎(chǔ)之StringBuffer詳解的文章就介紹到這了,更多相關(guān)java StringBuffer詳解內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 亚洲最大福利网 | 国产免费又色又爽又黄在线观看 | 婷婷福利视频导航 | av网站推荐| 羞羞网站免费 | 国产精品久久国产精品99 gif | 婷婷久久综合 | 亚洲精品免费观看 | 精品久久香蕉国产线看观看亚洲 | 久久精品视频12 | 成人精品国产一区二区4080 | 久久精品久久久 | 欧美日韩国产在线观看 | 日本天堂一区 | 欧美日韩高清在线观看 | 激情五月综合 | 美女久久 | 久久精品视频亚洲 | 偷拍亚洲色图 | 亚洲免费网 | 亚洲成人免费视频在线 | 国产99精品 | 精品日韩一区二区 | 亚洲高清在线 | 国产精品区一区二区三 | 午夜免费观看网站 | 亚洲视频www | 欧美精品一二三 | 欧美成人a∨高清免费观看 91伊人 | 91av视频在线观看 | 51ⅴ精品国产91久久久久久 | 国产精品成人久久久久 | 亚洲在线电影 | 欧美在线| 成人妇女免费播放久久久 | 国产在线麻豆精品入口 | 久久精品亚洲一区二区三区浴池 | 韩国理论电影在线 | 精品久久久久久久久久久久久久 | 国产精品伦理一区 | 亚洲综合精品 |