Java常用类(1)--字符串相关类String、StringBuffer、StringBuilder全面知识
文章目錄
- String類
- StringBuffer類
- StringBuilder類
String:不可變的字符序列;底層使用char[]存儲
StringBuffer:可變的字符序列;線程安全的,效率低;底層使用char[]存儲
StringBuilder:可變的字符序列; jdk5.0新增的,線程不安全的,效率高;底層使用char[]存儲
String類
String類:代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作為此類的實(shí)例實(shí)現(xiàn)
String:字符串,使用一對""引起來表示
①String聲明為final的, 不可被繼承。
②String實(shí)現(xiàn)了Serializable接口:表示字符串是支持序列化的。
③實(shí)現(xiàn)了Comparable接口:表示String可以比較大小。
④String內(nèi)部定義了final char[] value用于存儲字符串?dāng)?shù)據(jù),它們的值在創(chuàng)建后不能更改。
⑤String:代表不可變的字符序列,即不可變性。
體現(xiàn): 1. 當(dāng)對字符串類型變量重新賦值時,不是修改原理的value,而是重新指定內(nèi)存區(qū)域賦值。2. 當(dāng)對現(xiàn)有的字符串進(jìn)行連接操作時,也需要重新指定內(nèi)存區(qū)域賦值,不能使用原有的value進(jìn)行賦值。3.當(dāng)調(diào)用String的replace()方法修改指定字符或字符串時,也需要重新指定內(nèi)存區(qū)域賦值。
⑥通過字面量的方式(區(qū)別于new)給一個字符串賦值,此時的字符串值聲明在字符串常量池中。
⑦字符串常量池中是不會存儲相同內(nèi)容的字符串的。
String的不同實(shí)例化方式比較
方式一:通過字面量定義的方式
方式二:通過new + 構(gòu)造器的方式
String的不同拼接對比
String s1 = "Hello"; String s2 = "World"; final String sf = "world";String s3 = "HelloWorld"; String s4 = "Hello" + "World";String s5 = s1 + "World"; String s6 = "Hello" + s2; String s7 = s1 + s2; String sfx = "hello" + sf;system.out.print(s3 == s4); //true system.out.print(s3 == s5); //false system.out.print(s3 == s6); //false system.out.print(s3 == s7); //false system.out.print(s5 == s6); //false system.out.print(s5 == s7); //false system.out.print(sfx == s3); //trueString s8 = s5.intern(); system.out.print(s3 == s8); //trueString s9 = s7.intern(); system.out.print(s8 == s9); //true常量與常量的拼接結(jié)果在常量池,且常量池中不會存在相同內(nèi)容的常量;
只要其中有一個是變量,結(jié)果就在堆中,雖然堆中存儲的地址值也是指向常量池;
如果拼接的結(jié)果調(diào)用intern()方法,返回值就在常量池中。
String類常用方法
int length():返回字符串的長度: return value.length
char charAt(int index): 返回某索引處的字符return value[index]
boolean isEmpty():判斷是否是空字符串:return value.length == 0
String toLowerCase():使用默認(rèn)語言環(huán)境,將 String 中的所有字符轉(zhuǎn)換為小寫
String toUpperCase():使用默認(rèn)語言環(huán)境,將 String 中的所有字符轉(zhuǎn)換為大寫
String trim():返回字符串的副本,忽略前導(dǎo)空白和尾部空白
boolean equals(Object obj):比較字符串的內(nèi)容是否相同
boolean equalsIgnoreCase(String anotherString):忽略大小寫比較內(nèi)容
String concat(String str):將指定字符串連接到此字符串的結(jié)尾,等價于用“+”
int compareTo(String anotherString):比較兩個字符串的大小,加減
String substring(int beginIndex):返回一個新的字符串,它是此字符串的從
beginIndex開始截取到最后的一個子字符串
String substring(int beginIndex, int endIndex):返回一個新字符串,它是此字符串從beginIndex開始截取到endIndex(不包含)的一個子字符串
boolean endsWith(String suffix):此字符串是否以指定的后綴結(jié)束
boolean startsWith(String prefix):此字符串是否以指定的前綴開始
boolean startsWith(String prefix, int toffset):此字符串從指定索引開始的子字符串是否以指定前綴開始
boolean contains(CharSequence s):此字符串是否包含指定的序列
int indexOf(String str):返回指定子字符串在此字符串中第一次出現(xiàn)處的索引
int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出現(xiàn)處的索引,從指定的索引開始
int lastIndexOf(String str):返回指定子字符串在此字符串中最后一次出現(xiàn)處的索引
int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出現(xiàn)處的索引,從指定的索引開始反向搜索
(注:indexOf和lastIndexOf方法如果未找到都是返回-1)
String replace(char oldChar, char newChar):返回一個新的字符串,它是通過用 newChar 替換此字符串中出現(xiàn)的所有 oldChar 得到的
String replace(CharSequence target, CharSequence replacement):使用指定的字面值替換序列替換此字符串所有匹配字面值目標(biāo)序列的子字符串
String replaceAll(String regex, String replacement): 使 用 給 定 的replacement 替換此字符串所有匹配給定的正則表達(dá)式的子字符串
String replaceFirst(String regex, String replacement): 使 用 給 定 的replacement 替換此字符串匹配給定的正則表達(dá)式的第一個子字符串
boolean matches(String regex):告知此字符串是否匹配給定的正則表達(dá)式
String[] split(String regex):根據(jù)給定正則表達(dá)式的匹配拆分此字符串
String[] split(String regex, int limit):根據(jù)匹配給定的正則表達(dá)式來拆分此字符串,最多不超過limit個,如果超過了,剩下的全部都放到最后一個元素中
String類與其他類型的轉(zhuǎn)換
①String與基本數(shù)據(jù)類型及其包裝類的轉(zhuǎn)換:
String–>基本數(shù)據(jù)類型、包裝類:例如Integer.parseInt(String s)(Xxx包裝類.parseXxx(str))
基本數(shù)據(jù)類型、包裝類–>String:String.valueOf(xxx)或者xxx + ""
②String與字符數(shù)組char[ ]的轉(zhuǎn)換:
String–>字符數(shù)組char[ ]:str.toCharArray();getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)提供了將指定索引范圍內(nèi)的字符串存放到數(shù)組中的方法
字符數(shù)組char[ ]–>String:String 類的構(gòu)造器:String(char[]) 和 String(char[],int offset,int length) 分別用字符數(shù)組中的全部字符和部分字符創(chuàng)建字符串對象
③String與字節(jié)數(shù)組byte[ ]轉(zhuǎn)換:
String–>字節(jié)數(shù)組byte[ ](編碼):str.getBytes()使用平臺的默認(rèn)字符集將此 String 編碼為byte序列;str.getBytes(String charsetName)使用指定的字符集將此 String編碼為byte序列
字節(jié)數(shù)組byte[ ]–>String(解碼):String(byte[])通過使用平臺的默認(rèn)字符集解碼指定的byte數(shù)組,構(gòu)造一個新的 String;String(byte[],int offset,int length)用指定的字節(jié)數(shù)組的一部分,即從數(shù)組起始位置offset開始取length個字節(jié)構(gòu)造一個字符串對象
StringBuffer類
對字符串內(nèi)容進(jìn)行增刪,不會產(chǎn)生新的對象。
StringBuffer類不同于String,其對象必須使用構(gòu)造器生成。有三個構(gòu)造器:
StringBuffer():初始容量為16的字符串緩沖區(qū)
StringBuffer(int size):構(gòu)造指定容量的字符串緩沖區(qū)
StringBuffer(String str):將內(nèi)容初始化為指定字符串內(nèi)容
擴(kuò)容問題:如果要添加的數(shù)據(jù)底層數(shù)組盛不下了,那就需要擴(kuò)容底層的數(shù)組。
默認(rèn)情況下,擴(kuò)容為原來容量的2倍+ 2,同時將原有數(shù)組中的元素復(fù)制到新的數(shù)組中,第一次相當(dāng)于(16 * 2 + 2 = 34)。
StringBuffer類的常用方法
StringBuffer append(xxx):提供了很多的append()方法,用于進(jìn)行字符串拼接
StringBuffer delete(int start,int end):刪除指定位置的內(nèi)容
StringBuffer replace(int start, int end, String str):把[start,end)位置替換為str
StringBuffer insert(int offset, xxx):在指定位置插入xxx
StringBuffer reverse():把當(dāng)前字符序列逆轉(zhuǎn)
當(dāng)append和insert時,如果原來value數(shù)組長度不夠,可擴(kuò)容。如上這些方法支持方法鏈操作。
int indexOf(String str)
String substring(int start,int end)
int length()
char charAt(int n )
void setCharAt(int n ,char ch)
StringBuilder類
StringBuilder 和 StringBuffer 非常類似,均代表可變的字符序列,而且提供相關(guān)功能的方法也一樣。不存在多線程問題的時候,考慮使用StringBuffer。
總結(jié)
以上是生活随笔為你收集整理的Java常用类(1)--字符串相关类String、StringBuffer、StringBuilder全面知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java多线程(7)--线程池创建线程
- 下一篇: 火腿肠是什么做的东西(吃火腿肠对身体有危