String類與StringBuffer類 正則表達式
1、String類和StringBuffer類的區別 數組
String類是不可變類,新建的對象爲不可變對象(String類的內容和長度是固定的),一旦被建立就不能修改它的值(對於已經存在的String對象的修改都是從新建立一個新的對象,而後把新的值保存進去); String類是final類型不可被繼承。 安全
StringBuffer類是可變類,新建的對象是一個可變的對象,當須要修改其內容的時候,不須要再建立新的字符串對象,而是直接操做原來的串;不能經過賦值符號對他進行賦值(只能經過構造函數來創建, StringBuffer sb = new StringBuffer(),每一個StringBuffer對象都有必定的緩衝區容量,當字符串大小超過容量時,會自動增長容量);字符串鏈接操做中StringBuffer的效率要比String高。 多線程
另外因爲StringBuffer是線程安全的,因此在多線程程序中也能夠很方便的進行使用,可是程序的執行效率相對來講就要稍微慢一些。從JDK5開始,爲該類補充了一個單個線程使用的等價類,即StringBuilder。與該類相比,一般應該優先使用StringBuilder類,由於它支持全部相同的操做,但因爲它不支持同步,因此速度更快。 app
String 做爲參數傳遞是相似於基本數據類型做爲參數傳遞(值傳遞),StringBuffer 做爲參數傳遞就是引用數據類型傳遞。 函數
總結一下: 測試
相同點: ui
(1)String類與StringBuffer類都用來處理字符串。 編碼
(2)部分方法在兩者中的用法是相同的。 spa
(3)在這兩個類中,字符的索引都是從0開始的。
(4)這兩個類都是CharSequence的子類。CharSequence接口描述的是一系列字符集。
不一樣點:
(1)String類是不可變類,由於在底端是用字符數組實現的,而數組長度固定,一旦賦值,就不能在原來的字符串上進行修改可能會浪費空間。StringBuffer類是可變類,可以在原來的數組上進行修改。
(2)String類覆蓋了Object類的equals()方法,而StringBuffer類沒有覆蓋該方法。比較StringBuffer字符串內容是否相等,可使用toString() 方法將StringBuffer的內容轉換爲String 字符串,再使用equals()方法比較。
(3)雖然兩個類都覆蓋了toString()方法,但各自的實現方式不一樣。String類的toString()方法返回當前String對象的引用。而StringBuffer類的toString()方法返回一個以當前StringBuffer的緩衝區的全部字符爲內容的新的String對象的引用。
(4)String類對象能夠用操做符"+"進行鏈接,而StringBuffer類的對象經過append()方法添加新的字符串。
2、StringBuffer對象和String對象之間的互轉
String s = "abc"; StringBuffer sb1 = new StringBuffer("123"); StringBuffer sb2 = new StringBuffer(s); //String轉換爲StringBuffer String s1 = sb1.toString(); //StringBuffer轉換爲String |
3、StringBuffer類
1.StringBuffer的構造方法
public StringBuffer() 構造一個其中不帶字符的字符串緩衝區,其初始容量爲 16 個字符。
public StringBuffer(int capacity):指定容量大小
public StringBuffer(String str):構造一個字符串緩衝區:裏面的容量(字符串內容英文)大小:字符串長度+16初始容量
使用append()方法在字符串後面追加東西的時候,若是長度超過了該字符串存儲空間大小了就自動進行擴容:構建新的存儲空間更大的字符串,將舊的複製過去;
在進行字符串append添加的時候,會先計算添加後字符串大小,傳入一個方法:ensureCapacityInternal 這個方法進行是否擴容的判斷,須要擴容就調用expandCapacity方法進行擴容:嘗試將新容量擴爲大小變成2倍+2 ,判斷一下 容量若是不夠,直接擴充到須要的容量大小。
2.StringBuffer獲取功能
public int capacity():初始容量
public synchronized int length():返回字符串長度
3.StringBuffer的添加功能
StringBuffer append(xxx x):將指定的內容追加(末尾追加)到字符串緩衝區中,返回StringBuffer自己
public StringBuffer insert(int index,xxx x):在指定位置處,插入一個新的內容,返回StringBuffer自己
void setLength(int newLength) 從新設置字符串緩衝區中字符串的長度,若是newLength小於當前的字符串長度,將截去多餘的字符。
public void ensureCapacity (int minimumCapacity) 從新設置字符號串緩衝區的總空間。若是minimumCapacity大於當前的總空間,則新的空間被設置:一種結果是minimumCapacity;另外一種結果是{"老空間"乘2加2}。
4.StringBuffer的刪除功能
StringBuffer deleteCharAt(int index) :刪除指定位置出的字符,返回字符串緩衝區自己
StringBuffer delete(int start, int end) :刪除從指定位置開始到指定位置結束,返回值字符串緩衝區自己
public void trimToSize()將StringBuffer對象的中存儲空間縮小到和字符串長度同樣的長度,減小空間的浪費。
5.StringBuffer的替換功能
public StringBuffer replace(int start,int end,String str):從指定位置開始到指定位置結束,用給定的str字符串替換指定的字符內容
public void setCharAt(int index, char ch):修改對象中索引值爲index位置的字符爲新的字符ch
6.StringBuffer的反轉功能
public StringBuffer reverse () 反轉功能
7.StringBuffer的截取功能
String substring(int start) :從指定位置默認截取到末尾,返回一個新的字符串
String substring(int start,int end):從指定位置開始截取到指定位置結束
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 從當前StringBuffer對象的索引號srcBegin開始,到srcEnd結束的子串,賦值到字符數組dst中,而且從dst的索引號dstBegin開始。
8. StringBuffer查找功能
int indexOf(String str) 返回當前StringBuffer對象中,第一個知足str子串的位置。
int indexOf(String str, int fromIndex) 從當前StringBuffer對象的fromIndex開始查找,返回第一個知足str子串的位置。
int lastIndexOf(String str) 返回當前StringBuffer對象中,最後一個知足str子串的位置。
int lastIndexOf(String str, int fromIndex) 從當前StringBuffer對象的fromIndex開始查找,返回最後一個知足str子串的位置。
4、String類方法(分類參考)
方法摘要 |
|
char |
charAt(int index) |
int |
codePointAt(int index) |
int |
codePointBefore(int index) |
int |
codePointCount(int beginIndex, int endIndex) |
int |
compareTo(String anotherString) |
int |
compareToIgnoreCase(String str) |
String |
concat(String str) |
boolean |
contains(CharSequence s) |
boolean |
contentEquals(CharSequence cs) |
boolean |
contentEquals(StringBuffer sb) |
static String |
copyValueOf(char[] data) |
static String |
copyValueOf(char[] data, int offset, int count) |
boolean |
endsWith(String suffix) |
boolean |
equals(Object anObject) |
boolean |
equalsIgnoreCase(String anotherString) |
static String |
format(Locale l, String format, Object... args) |
static String |
format(String format, Object... args) |
byte[] |
getBytes() |
byte[] |
getBytes(Charset charset) |
void |
getBytes(int srcBegin, int srcEnd, byte[] dst, int dstBegin) |
byte[] |
getBytes(String charsetName) |
void |
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) |
int |
hashCode() |
int |
indexOf(int ch) |
int |
indexOf(int ch, int fromIndex) |
int |
indexOf(String str) |
int |
indexOf(String str, int fromIndex) |
String |
intern() |
boolean |
isEmpty() |
int |
lastIndexOf(int ch) |
int |
lastIndexOf(int ch, int fromIndex) |
int |
lastIndexOf(String str) |
int |
lastIndexOf(String str, int fromIndex) |
int |
length() |
boolean |
matches(String regex) |
int |
offsetByCodePoints(int index, int codePointOffset) |
boolean |
regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) |
boolean |
regionMatches(int toffset, String other, int ooffset, int len) |
String |
replace(char oldChar, char newChar) |
String |
replace(CharSequence target, CharSequence replacement) |
String |
replaceAll(String regex, String replacement) |
String |
replaceFirst(String regex, String replacement) |
String[] |
split(String regex) |
String[] |
split(String regex, int limit) |
boolean |
startsWith(String prefix) |
boolean |
startsWith(String prefix, int toffset) |
CharSequence |
subSequence(int beginIndex, int endIndex) |
String |
substring(int beginIndex) |
String |
substring(int beginIndex, int endIndex) |
char[] |
toCharArray() |
String |
toLowerCase() |
String |
toLowerCase(Locale locale) |
String |
toString() |
String |
toUpperCase() |
String |
toUpperCase(Locale locale) |
String |
trim() |
static String |
valueOf(boolean b) |
static String |
valueOf(char c) |
static String |
valueOf(char[] data) |
static String |
valueOf(char[] data, int offset, int count) |
static String |
valueOf(double d) |
static String |
valueOf(float f) |
static String |
valueOf(int i) |
static String |
valueOf(long l) |
static String |
valueOf(Object obj) |