欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java字符串的處理方式及作用介紹

 更新時間:2025年05月17日 10:17:44   作者:阿乾之銘  
StringBuilder、StringBuffer?和?String是Java中處理字符串的三種主要方式,每種有不同的特點和適用場景,下面給大家介紹Java字符串的處理方法及作用介紹

StringBuilder、StringBufferString 是 Java 中處理字符串的三種主要方式,每種有不同的特點和適用場景。讓我們逐個詳細了解它們的區(qū)別、作用及使用方法。

1. String 特性:

  • String 是不可變類(immutable),一旦創(chuàng)建就不能更改。如果對字符串進行修改操作,例如拼接、截取、替換等操作,都會產(chǎn)生新的字符串對象,并且舊的對象仍然保留在內(nèi)存中,直到被垃圾回收。
  • 作用String 通常用于存儲和操作不經(jīng)常變化的字符串數(shù)據(jù),如靜態(tài)文本、標簽、用戶輸入等。
  • 使用場景
    • 當字符串內(nèi)容不頻繁變化時適合使用 String,例如拼接少量字符串。
    • 因為不可變特性,String 對多線程是天然安全的,不會受到并發(fā)修改的影響。

示例代碼

String str = "Hello";
str += " World";  // 會創(chuàng)建新的字符串對象 "Hello World"
System.out.println(str);  // 輸出 "Hello World"
  • Java中的String類不可以被繼承,因為String類被聲明為final,禁止其他類繼承它。 
  • String類型的“+”方法的底層實現(xiàn):編譯器將+轉(zhuǎn)換為StringBuilderappend()鏈式調(diào)用,最后調(diào)用toString()生成新String對象。

2. StringBuffer

  • 特性
  • StringBuffer 是可變類(mutable),它在修改時不會創(chuàng)建新的對象。適合需要頻繁修改字符串的場景。StringBuffer 是線程安全的,每個方法都加了 synchronized 關鍵字,保證在多線程環(huán)境下的安全性。
  • 作用:在多線程環(huán)境中需要頻繁操作字符串時,StringBuffer 是更合適的選擇。
  • 使用場景
    • 當多個線程可能會同時操作同一字符串時使用 StringBuffer。
    • 在需要大量拼接字符串且要求線程安全的場景下,如在 appendinsert 等操作中使用。

示例代碼

StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
System.out.println(sb.toString());  // 輸出 "Hello World"

3. StringBuilder

  • 特性StringBuilder 也是可變類,與 StringBuffer 的用法基本相同,適合頻繁修改字符串內(nèi)容的場景。但與 StringBuffer 不同的是,StringBuilder 不是線程安全的,因此在單線程環(huán)境中,StringBuilder 的性能更高。
  • 作用:在單線程環(huán)境下,StringBuilder 可以替代 StringBuffer,提供更高的性能。
  • 使用場景
    • 單線程環(huán)境下,頻繁修改字符串的場合使用 StringBuilder。
    • 推薦在需要拼接大量字符串且不涉及多線程的場景中使用 StringBuilder

示例代碼

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
System.out.println(sb.toString());  // 輸出 "Hello World"

總結對比

特性StringStringBufferStringBuilder
是否可變不可變可變可變
線程安全
性能最低中等最高(單線程情況下)
使用場景少量字符串修改多線程環(huán)境中大量字符串修改單線程環(huán)境中大量字符串修改

StringBuilder、StringBufferString 之間的轉(zhuǎn)換方法

(1)String 轉(zhuǎn) StringBuilder / StringBuffer

使用 構造方法 直接轉(zhuǎn)換:

// String -> StringBuilder
String str = "Hello";
StringBuilder stringBuilder = new StringBuilder(str);
// String -> StringBuffer
StringBuffer stringBuffer = new StringBuffer(str);

(2)StringBuilder / StringBuffer 轉(zhuǎn) String

使用 toString() 方法轉(zhuǎn)換為 String

// StringBuilder -> String
StringBuilder stringBuilder = new StringBuilder("Hello");
String strFromBuilder = stringBuilder.toString();
// StringBuffer -> String
StringBuffer stringBuffer = new StringBuffer("Hello");
String strFromBuffer = stringBuffer.toString();

(3)StringBuilder 和 StringBuffer 之間轉(zhuǎn)換

由于 StringBuilderStringBuffer 都有類似的構造方法,可以直接通過構造方法進行轉(zhuǎn)換。

// StringBuilder -> StringBuffer
StringBuilder stringBuilder = new StringBuilder("Hello");
StringBuffer stringBuffer = new StringBuffer(stringBuilder);
// StringBuffer -> StringBuilder
StringBuffer stringBuffer2 = new StringBuffer("World");
StringBuilder stringBuilder2 = new StringBuilder(stringBuffer2);

1. String 的常用方法

由于 String 是不可變的,每次修改都會返回一個新對象。以下是常用方法:

1.1 charAt(int index)

獲取指定位置的字符。

String str = "Hello";
char ch = str.charAt(1);  // 'e'

1.2 concat(String str)

拼接字符串,返回一個新的字符串。

String str1 = "Hello";
String str2 = str1.concat(" World");  // "Hello World"

1.3 substring(int beginIndex, int endIndex)

截取字符串的子串,返回新字符串。

String str = "Hello World";
String subStr = str.substring(0, 5);  // "Hello"

1.4 toUpperCase() / toLowerCase()

轉(zhuǎn)換為大寫或小寫,返回新字符串。

String str = "Hello World";
String upper = str.toUpperCase();  // "HELLO WORLD"

1.5 replace(char oldChar, char newChar)

替換字符,返回新的字符串。replace() 方法有兩個重載版本:

(1)replace(char oldChar, char newChar)
用于替換單個字符,參數(shù)是 char 類型,需要用單引號。

String str = "Hello World";
String noSpaceStr = str.replace(' ', ''); // 錯誤!第二個參數(shù)不能為空字符

注意:這里有一個問題,newChar 不能為空字符(''),因為 Java 中字符不能為空。所以這種方法不適用于去除空格。

(2)replace(CharSequence target, CharSequence replacement)
用于替換字符串,參數(shù)是 CharSequence 類型(String 是其子類),需要用雙引號。

String str = "Hello World";
String noSpaceStr = str.replace(" ", ""); // 正確!用空字符串替換空格字符串

為什么用雙引號?

在去除空格時,我們通常希望將空格字符串(" ")替換為空字符串(""),而不是替換單個字符。因此,使用雙引號的 replace(" ", "") 是正確的做法。

1.6 split(String regex)

根據(jù)正則表達式分割字符串,返回字符串數(shù)組。

String str = "Hello,World,Java";
String[] parts = str.split(",");  // ["Hello", "World", "Java"]

1.7 equals(Object obj)

比較字符串內(nèi)容是否相等。

String str1 = "Hello";
String str2 = "Hello";
boolean isEqual = str1.equals(str2);  // true

1.8 isEmpty()

判斷字符串是否為空。

String str = "";
boolean isEmpty = str.isEmpty();  // true

1.9 toCharArray()

將字符串轉(zhuǎn)換為字符數(shù)組。

String str = "Hello";
char[] charArray = str.toCharArray();  // ['H', 'e', 'l', 'l', 'o']

1.10 String.valueOf(char[] data)

String 類的靜態(tài)方法 valueOf 也可以將 char 數(shù)組轉(zhuǎn)換為 String

char[] charArray = {'H', 'e', 'l', 'l', 'o'};
String str = String.valueOf(charArray);  // "Hello"

2. StringBuffer 的常用方法

StringBuffer 是可變的,支持在原對象上修改字符串。以下是一些常見的方法:

2.1 append(String str)(有重載版本添加其他數(shù)據(jù)類型,比如char)

在末尾添加字符串,修改原對象。

StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");  // 修改后變?yōu)?"Hello World"

2.2 insert(int offset, String str)

在指定位置插入字符串。

StringBuffer sb = new StringBuffer("Hello World");
sb.insert(5, ",");  // 修改后變?yōu)?"Hello, World"

2.3 replace(int start, int end, String str)

替換指定范圍內(nèi)的內(nèi)容。

StringBuffer sb = new StringBuffer("Hello World");
sb.replace(6, 11, "Java");  // 修改后變?yōu)?"Hello Java"

2.4 delete(int start, int end)

刪除指定范圍內(nèi)的字符。

StringBuffer sb = new StringBuffer("Hello World");
sb.delete(5, 11);  // 修改后變?yōu)?"Hello"

2.5 reverse()

將字符串內(nèi)容反轉(zhuǎn)。

StringBuffer sb = new StringBuffer("Hello");
sb.reverse();  // 修改后變?yōu)?"olleH"

2.6 deleteCharAt(int index)

刪除指定位置的字符 

StringBuffer sbf = new StringBuffer("Java?");
sbf.deleteCharAt(sbf.length() - 1); // 刪除最后一個字符 '?'
System.out.println(sbf); // 輸出: Java

3. StringBuilder 的常用方法

StringBuilderStringBuffer 方法相同,但不加鎖,適合單線程場景。以下列舉常用方法:

3.1 append(String str) (有重載版本添加其他數(shù)據(jù)類型,比如char)

在末尾添加字符串。

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");  // 修改后變?yōu)?"Hello World"

3.2 insert(int offset, String str)

在指定位置插入字符串。

StringBuilder sb = new StringBuilder("Hello World");
sb.insert(5, ",");  // 修改后變?yōu)?"Hello, World"

3.3 replace(int start, int end, String str)

替換指定范圍的內(nèi)容。

StringBuilder sb = new StringBuilder("Hello World");
sb.replace(6, 11, "Java");  // 修改后變?yōu)?"Hello Java"

3.4 delete(int start, int end)

刪除指定范圍的字符。

StringBuilder sb = new StringBuilder("Hello World");
sb.delete(5, 11);  // 修改后變?yōu)?"Hello"

3.5 reverse()

將字符串內(nèi)容反轉(zhuǎn)。

StringBuilder sb = new StringBuilder("Hello");
sb.reverse();  // 修改后變?yōu)?"olleH"

3.6 deleteCharAt(int index)

刪除指定位置的字符 

StringBuilder sb = new StringBuilder("Hello!");
sb.deleteCharAt(5); // 刪除索引5位置的字符 '!'
System.out.println(sb); // 輸出: Hello

到此這篇關于Java字符串的處理的文章就介紹到這了,更多相關Java字符串處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java 中的instanceof用法詳解及instanceof是什么意思(推薦)

    java 中的instanceof用法詳解及instanceof是什么意思(推薦)

    instanceof 是 Java 的保留關鍵字。它的作用是測試它左邊的對象是否是它右邊的類的實例,返回 boolean 的數(shù)據(jù)類型。接下來通過本文給大家介紹java 中的instanceof用法詳解及instanceof是什么意思,需要的朋友參考下吧
    2017-11-11
  • springboot根據(jù)實體類生成表的實現(xiàn)方法

    springboot根據(jù)實體類生成表的實現(xiàn)方法

    本文介紹了如何通過SpringBoot工程引入SpringDataJPA,并通過實體類自動生成數(shù)據(jù)庫表的過程,包括常見問題解決方法,感興趣的可以了解一下
    2024-09-09
  • Java中wait與sleep的區(qū)別講解(wait有參及無參區(qū)別)

    Java中wait與sleep的區(qū)別講解(wait有參及無參區(qū)別)

    這篇文章主要介紹了Java中wait與sleep的講解(wait有參及無參區(qū)別),通過代碼介紹了wait()?與wait(?long?timeout?)?區(qū)別,wait(0)?與?sleep(0)區(qū)別,需要的朋友可以參考下
    2022-04-04
  • Java反應式框架Reactor中的Mono和Flux

    Java反應式框架Reactor中的Mono和Flux

    這篇文章主要介紹了Java反應式框架Reactor中的Mono和Flux,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • SpringMVC之DispatcherServlet配置文件應該放在哪里呢

    SpringMVC之DispatcherServlet配置文件應該放在哪里呢

    這篇文章主要介紹了SpringMVC之DispatcherServlet配置文件應該放在哪里的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 詳解springboot使用異步注解@Async獲取執(zhí)行結果的坑

    詳解springboot使用異步注解@Async獲取執(zhí)行結果的坑

    本文主要介紹了springboot使用異步注解@Async獲取執(zhí)行結果的坑,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 深入理解HashMap各個方法的源碼

    深入理解HashMap各個方法的源碼

    這篇文章主要介紹了深入理解HashMap各個方法的源碼,HashMap初始容量不能為負數(shù),若初始容量大于最大容量,則讓它等于最大容量,負載因子必須大于0,并且傳入的initialCapacity不是HashMap的容量大小,需要的朋友可以參考下
    2023-12-12
  • SpringBoot應用剛啟動時服務報大量超時的問題及解決

    SpringBoot應用剛啟動時服務報大量超時的問題及解決

    在Java項目上線過程中,經(jīng)常遇到的超時問題主要是由于JVM的JIT編譯導致,JIT(Just-In-Time)編譯是Java虛擬機的一項技術,用于提高Java應用的性能,它通過將熱點代碼(頻繁執(zhí)行的部分)轉(zhuǎn)換成本地機器碼來優(yōu)化執(zhí)行效率
    2024-11-11
  • 詳解Spring事件發(fā)布與監(jiān)聽機制

    詳解Spring事件發(fā)布與監(jiān)聽機制

    Spring提供了ApplicationContext事件機制,可以發(fā)布和監(jiān)聽事件,這個特性非常有用。Spring內(nèi)置了一些事件和監(jiān)聽器,例如在Spring容器啟動前,Spring容器啟動后,應用啟動失敗后等事件發(fā)生后,監(jiān)聽在這些事件上的監(jiān)聽器會做出相應的響應處理
    2021-06-06
  • JAVA加密算法- 非對稱加密算法(DH,RSA)的詳細介紹

    JAVA加密算法- 非對稱加密算法(DH,RSA)的詳細介紹

    這篇文章主要介紹了JAVA加密算法- 非對稱加密算法(DH,RSA),詳細介紹了DH,RSA的用法和示例,需要的朋友可以了解一下。
    2016-11-11

最新評論