日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 里的字符串处理类StringBuffer简介

發(fā)布時間:2025/3/20 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 里的字符串处理类StringBuffer简介 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一, 什么是StringBuffer 和 為何需要StringBuffer

http://blog.csdn.net/nvd11/article/details/19552449

本人在上篇介紹String 類 的博文里提過:??

String類 是代表字符串的類, 但是String類指向的字符串是常量是不可修改的.

而且String類本身沒有提供類似 insert, delete, set等修改字符串的方法.


例如:

1個String對象的值是abcde

String s = "abcde";

如果想把第4個字符("d")刪掉.

String是沒有提供類似 delete(int charIndex)的方法的.

當然, 程序猿可以用

String s2 = s.replace(s.substring(3,4), "");

來解決問題.

但是, 上面的語句實際上在內(nèi)存堆區(qū)里劃分了兩個額外的String對象空間. 而且如果有多個相同的字符的話"d", 就會出錯.


所以如果只用String類來處理字符串的話, 不但實現(xiàn)起來比較復雜, 而且很耗費時間和空間(內(nèi)存).


更何況有些字符處理需求只用String類很難實現(xiàn), 例如在第1個b后面插入一段字符串..


所以Java提供了另一個類StringBuffer讓程序猿更方便地進行字符串處理.

String類實際之上指向數(shù)據(jù)區(qū)的字符串常量.

而StringBuffer會把字符串當做字符數(shù)組在堆區(qū)處理, 所以StringBuffer的內(nèi)容是可以修改的.


而且StringBuffer 提供了相當多的字符串修改函數(shù), 如果一個java程序經(jīng)常處理字符串, 建議使用StringBuffer類.

StringBuffer可以通過toString()函數(shù)返回1個String對象函數(shù).


二, StringBuffer的常用構(gòu)造函數(shù).

1.

public StringBuffer()

這種無參的構(gòu)造函數(shù)代表創(chuàng)建1個空的,沒有任何字符的StringBuffer對象.


2.

public StringBuffer(int capacity)

構(gòu)造1個空的, 沒有任何字符串的StringBuffer對象, 但是具有長度為capacity的初始容量.? 而上面那個無參構(gòu)造方法的初始容量為0.

如果capacity 參數(shù)小于0則拋出異常.


注意

Capacity 指的的是StringBuffer可以存放的字符長度, 而不是當前字符長度length(), 如果length超過capacity, 則該對象在內(nèi)存里必須重新動態(tài)分配,獲得更大的capacity.

類似于c語言的malloc 與realloc函數(shù).


3.

public StringBuffer(String str)

創(chuàng)建1個StringBuffer對象, 并將內(nèi)容初始化為與String對象 str一樣的字符序列.? 其capacity為str.length() + 16.


這個是最常用的構(gòu)造方法.


三, StringBuffer的常用方法.

1. public void setLegnth(int newLength)

將StringBuffer對象的當前長度設(shè)為新的長度newLength.

如果currentLength <= newLength,?? 則新的位置全部為"\0000", 亦即系Null值.

如果currentLength > newLength,? 相當于該對象執(zhí)行了substring(0,newLength - 1) ,被截斷了.


例子:

package String_kng;public class StringBuffer_2{public static void f(){StringBuffer sb = new StringBuffer("InterMilan");System.out.printf("length of sb is %d\n",sb.length()); System.out.printf("char[5] of sb is %c\n",sb.charAt(5)); try{System.out.printf("char[10] of sb is %c\n",sb.charAt(10)); }catch(StringIndexOutOfBoundsException e){System.out.printf("Index 10 is out of bounds\n");}sb.setLength(12);System.out.printf("\nsb is %s\n",sb); System.out.printf("length of sb is %d\n",sb.length()); System.out.printf("char[10] of sb is %c\n\n",sb.charAt(10)); sb.setLength(5);System.out.printf("sb is %s\n",sb); try{System.out.printf("char[5] of sb is %c\n",sb.charAt(5)); }catch(StringIndexOutOfBoundsException e){System.out.printf("Index 5 is out of bounds\n");}} }

輸出:

[java] length of sb is 10[java] char[5] of sb is M[java] Index 10 is out of bounds[java] [java] sb is InterMilan[java] length of sb is 12[java] char[10] of sb is [java] [java] sb is Inter[java] Index 5 is out of bounds


2. public StringBuffer insert(int offset, String str)

在指定位置(index 為 offset)插入一段字符. 返回修改后的StringBuffer對象引用,調(diào)用該方法的對象沒被修改

注意insert 有另1個重載 insert(int offset, double d)?? 無非就是把double類型轉(zhuǎn)成字符



3. public StringBuffer delete(int start, int end)


刪除指定位置的字符, 并返回修改后的StringBuffer對象引用.



4. public StringBuffer append(....)

append函數(shù)具有多個重載, 也就是支持多種類型的參數(shù).

append表示在尾部追加, sb.append(str)相當于sb.insert(sb.length(),str)


5. public StringBuffer reverse()

字符串倒置, 例如"Inter" 倒置后就是"retnI"


其余還有很多于String類一樣的方法, 例如 substring, indexOf 等等, 不詳細講了, 可以參考我之前的介紹String類的文章.





總結(jié)

以上是生活随笔為你收集整理的Java 里的字符串处理类StringBuffer简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。