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

歡迎訪問 生活随笔!

生活随笔

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

java

Java常用类(1)--字符串相关类String、StringBuffer、StringBuilder全面知识

發布時間:2023/12/2 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java常用类(1)--字符串相关类String、StringBuffer、StringBuilder全面知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • String類
    • StringBuffer類
    • StringBuilder類



String:不可變的字符序列;底層使用char[]存儲
StringBuffer:可變的字符序列;線程安全的,效率低;底層使用char[]存儲
StringBuilder:可變的字符序列; jdk5.0新增的,線程不安全的,效率高;底層使用char[]存儲



String類

String類:代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作為此類的實例實現

String:字符串,使用一對""引起來表示

①String聲明為final的, 不可被繼承。

②String實現了Serializable接口:表示字符串是支持序列化的。

③實現了Comparable接口:表示String可以比較大小。

④String內部定義了final char[] value用于存儲字符串數據,它們的值在創建后不能更改。

⑤String:代表不可變的字符序列,即不可變性。
體現: 1. 當對字符串類型變量重新賦值時,不是修改原理的value,而是重新指定內存區域賦值。2. 當對現有的字符串進行連接操作時,也需要重新指定內存區域賦值,不能使用原有的value進行賦值。3.當調用String的replace()方法修改指定字符或字符串時,也需要重新指定內存區域賦值。

⑥通過字面量的方式(區別于new)給一個字符串賦值,此時的字符串值聲明在字符串常量池中。

⑦字符串常量池中是不會存儲相同內容的字符串的。


String的不同實例化方式比較

方式一:通過字面量定義的方式
方式二:通過new + 構造器的方式

//通過字面量定義的方式:此時的s1和s2的數據“Hello”聲明在方法區中的字符串常量池中 String s1 = "Hello"; String s2 = "Hello";//通過new+構造器的方式:此時的s3和s4保存的地址值,是數據在堆空間中開辟的空間所對應的地址值 String s3 = new String("Hello"); String s4 = new String("Hello");system.out.print(s1 == s2); //true system.out.print(s1 == s3); //false system.out.print(s3 == s4); //false


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

常量與常量的拼接結果在常量池,且常量池中不會存在相同內容的常量;
只要其中有一個是變量,結果就在堆中,雖然堆中存儲的地址值也是指向常量池;
如果拼接的結果調用intern()方法,返回值就在常量池中。


String類常用方法

int length():返回字符串的長度: return value.length

char charAt(int index): 返回某索引處的字符return value[index]

boolean isEmpty():判斷是否是空字符串:return value.length == 0

String toLowerCase():使用默認語言環境,將 String 中的所有字符轉換為小寫
String toUpperCase():使用默認語言環境,將 String 中的所有字符轉換為大寫

String trim():返回字符串的副本,忽略前導空白和尾部空白

boolean equals(Object obj):比較字符串的內容是否相同
boolean equalsIgnoreCase(String anotherString):忽略大小寫比較內容

String concat(String str):將指定字符串連接到此字符串的結尾,等價于用“+”

int compareTo(String anotherString):比較兩個字符串的大小,加減

String substring(int beginIndex):返回一個新的字符串,它是此字符串的從
beginIndex開始截取到最后的一個子字符串

String substring(int beginIndex, int endIndex):返回一個新字符串,它是此字符串從beginIndex開始截取到endIndex(不包含)的一個子字符串

boolean endsWith(String suffix):此字符串是否以指定的后綴結束
boolean startsWith(String prefix):此字符串是否以指定的前綴開始
boolean startsWith(String prefix, int toffset):此字符串從指定索引開始的子字符串是否以指定前綴開始

boolean contains(CharSequence s):此字符串是否包含指定的序列

int indexOf(String str):返回指定子字符串在此字符串中第一次出現處的索引
int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出現處的索引,從指定的索引開始

int lastIndexOf(String str):返回指定子字符串在此字符串中最后一次出現處的索引
int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出現處的索引,從指定的索引開始反向搜索
(注:indexOf和lastIndexOf方法如果未找到都是返回-1)

String replace(char oldChar, char newChar):返回一個新的字符串,它是通過用 newChar 替換此字符串中出現的所有 oldChar 得到的
String replace(CharSequence target, CharSequence replacement):使用指定的字面值替換序列替換此字符串所有匹配字面值目標序列的子字符串
String replaceAll(String regex, String replacement): 使 用 給 定 的replacement 替換此字符串所有匹配給定的正則表達式的子字符串
String replaceFirst(String regex, String replacement): 使 用 給 定 的replacement 替換此字符串匹配給定的正則表達式的第一個子字符串

boolean matches(String regex):告知此字符串是否匹配給定的正則表達式

String[] split(String regex):根據給定正則表達式的匹配拆分此字符串
String[] split(String regex, int limit):根據匹配給定的正則表達式來拆分此字符串,最多不超過limit個,如果超過了,剩下的全部都放到最后一個元素中


String類與其他類型的轉換

①String與基本數據類型及其包裝類的轉換:
String–>基本數據類型、包裝類:例如Integer.parseInt(String s)(Xxx包裝類.parseXxx(str))
基本數據類型、包裝類–>String:String.valueOf(xxx)或者xxx + ""

②String與字符數組char[ ]的轉換:
String–>字符數組char[ ]:str.toCharArray();getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)提供了將指定索引范圍內的字符串存放到數組中的方法
字符數組char[ ]–>String:String 類的構造器:String(char[]) 和 String(char[],int offset,int length) 分別用字符數組中的全部字符和部分字符創建字符串對象

③String與字節數組byte[ ]轉換:
String–>字節數組byte[ ](編碼):str.getBytes()使用平臺的默認字符集將此 String 編碼為byte序列;str.getBytes(String charsetName)使用指定的字符集將此 String編碼為byte序列
字節數組byte[ ]–>String(解碼):String(byte[])通過使用平臺的默認字符集解碼指定的byte數組,構造一個新的 String;String(byte[],int offset,int length)用指定的字節數組的一部分,即從數組起始位置offset開始取length個字節構造一個字符串對象



StringBuffer類

對字符串內容進行增刪,不會產生新的對象。



StringBuffer類不同于String,其對象必須使用構造器生成。有三個構造器:

StringBuffer():初始容量為16的字符串緩沖區
StringBuffer(int size):構造指定容量的字符串緩沖區
StringBuffer(String str):將內容初始化為指定字符串內容

public class StringBufferTest {public static void main(String[] args) {StringBuffer sb1 = new StringBuffer(); //底層創建了一個長度為16的char型數組,char[16]System.out.println(sb1.length()); //0,因為該length()方法返回的不是value(char[])的長度,而是重寫的一個返回count的方法sb1.append('a'); //value[0]='a'sb1.append('b'); //value[1]='b'StringBuffer sb2 = new StringBuffer("abc"); //char[] value = new char["abc".length() + 16]System.out.println(sb2.length()); //3} }

擴容問題:如果要添加的數據底層數組盛不下了,那就需要擴容底層的數組。
默認情況下,擴容為原來容量的2倍+ 2,同時將原有數組中的元素復制到新的數組中,第一次相當于(16 * 2 + 2 = 34)。


StringBuffer類的常用方法

StringBuffer append(xxx):提供了很多的append()方法,用于進行字符串拼接

StringBuffer delete(int start,int end):刪除指定位置的內容

StringBuffer replace(int start, int end, String str):把[start,end)位置替換為str

StringBuffer insert(int offset, xxx):在指定位置插入xxx

StringBuffer reverse():把當前字符序列逆轉

當append和insert時,如果原來value數組長度不夠,可擴容。如上這些方法支持方法鏈操作。

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 非常類似,均代表可變的字符序列,而且提供相關功能的方法也一樣。不存在多線程問題的時候,考慮使用StringBuffer。



總結

以上是生活随笔為你收集整理的Java常用类(1)--字符串相关类String、StringBuffer、StringBuilder全面知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。