Java中String類常用的各種方法(示例詳解)
以下介紹字符串常見的幾個(gè)方法。
介紹String類
在 Java 中,String
類是一個(gè)代表字符串的類,具有以下特性:
不可變性:
String
對(duì)象一旦被創(chuàng)建就是不可變的,即它們的值在創(chuàng)建后不能被更改。任何對(duì)String
對(duì)象的修改操作實(shí)際上會(huì)創(chuàng)建一個(gè)新的String
對(duì)象。字符串池:Java 中的字符串池是一種特殊的內(nèi)存區(qū)域,用于存儲(chǔ)字符串常量。當(dāng)創(chuàng)建一個(gè)字符串時(shí),它會(huì)首先檢查字符串常量池中是否已經(jīng)存在相同值的字符串,如果存在,則返回池中的字符串引用,而不會(huì)創(chuàng)建新的對(duì)象。
比較:字符串可以通過
equals()
方法來比較它們的內(nèi)容是否相同。在 Java 中,使用equals()
比較字符串內(nèi)容,而不是使用==
來比較對(duì)象引用是否相等。不可變性帶來的安全性:由于字符串是不可變的,它們可以作為參數(shù)安全地傳遞給方法,以免被意外地修改。
性能:由于字符串是不可變的,它們可以被緩存起來重復(fù)利用,并且字符串連接的過程中可以使用
StringBuilder
或StringBuffer
類來提高性能。字符串操作方法:
String
類提供了許多方法用于對(duì)字符串進(jìn)行操作,比如length()
、charAt(index)
、substring()
等等,這些方法可以幫助開發(fā)人員方便地處理字符串。
總的來說,String
類在 Java 中具有重要的作用,是開發(fā)中經(jīng)常使用的類之一。它的不可變性和字符串池特性使得字符串的處理更加安全和高效。
1.拼接:
在 Java 中,String
類的 concat()
方法和 +
操作符都用于拼接字符串。這兩種方法都能夠?qū)蓚€(gè)字符串連接起來形成一個(gè)新的字符串,但有一些微小的區(qū)別:
concat()
方法:concat()
方法是String
類的實(shí)例方法,用于將指定的字符串連接到調(diào)用該方法的字符串的末尾。它返回一個(gè)新的字符串對(duì)象,原始字符串不受影響。例如:
String str1 = "Hello"; String str2 = "World"; String result = str1.concat(str2); // 結(jié)果為 "HelloWorld"
+
操作符:+
操作符也可以用于字符串拼接,它可以連接兩個(gè)字符串(也可以連接字符串和其他數(shù)據(jù)類型,會(huì)進(jìn)行類型轉(zhuǎn)換),這種方式在 Java 中比較常見。例如:
String str1 = "Hello"; String str2 = "World"; String result = str1 + str2; // 結(jié)果為 "HelloWorld"
主要區(qū)別在于語法形式,使用操作符 +
時(shí),其實(shí)是通過對(duì) String
類的 concat()
方法進(jìn)行隱式調(diào)用來實(shí)現(xiàn)字符串拼接。
在實(shí)際開發(fā)中,+
操作符更為常用,因?yàn)樗庇^,而且可以與其他數(shù)據(jù)類型混合使用,如:
String name = "Alice"; int age = 30; String message = "My name is " + name + " and I am " + age + " years old.";
以上代碼中,+
操作符不僅連接了多個(gè)字符串,還將整數(shù)類型轉(zhuǎn)換為字符串,形成了完整的輸出信息。
總的來說,無論是使用 concat()
方法還是 +
操作符,最終目的都是將多個(gè)字符串連接成一個(gè)新的字符串。
2.比較字符串是否相等:
當(dāng)我們想要比較兩個(gè)字符串是否相同時(shí),要特別注意,我們實(shí)際上是想比較字符串的內(nèi)容是否相同。必須使用equals()
方法而不能用==
。
我們看下面的例子:
// String public class Main { public static void main(String[] args) { String s1 = "hello"; String s2 = "hello"; System.out.println(s1 == s2); System.out.println(s1.equals(s2)); } }
從表面上看,兩個(gè)字符串用==
和equals()
比較都為true
,但實(shí)際上那只是Java編譯器在編譯期,會(huì)自動(dòng)把所有相同的字符串當(dāng)作一個(gè)對(duì)象放入常量池,自然s1
和s2
的引用就是相同的。
所以,這種==
比較返回true
純屬巧合。換一種寫法,==
比較就會(huì)失?。?/p>
// String public class Main { public static void main(String[] args) { String s1 = "hello"; String s2 = "HELLO".toLowerCase(); System.out.println(s1 == s2); System.out.println(s1.equals(s2)); } }
結(jié)論:兩個(gè)字符串比較,必須總是使用equals()
方法。
3.比較字符串的大小:
在 Java 中,String
類提供了 compareTo()
方法和 compareToIgnoreCase()
方法用于比較字符串之間的大小關(guān)系。這兩個(gè)方法返回整數(shù)值,用于表示兩個(gè)字符串之間的按字典排序的關(guān)系。以下是它們的介紹:
compareTo()
方法:compareTo()
方法用于按字典順序比較兩個(gè)字符串,并返回一個(gè)整數(shù)值,根據(jù)比較結(jié)果不同返回不同的值:- 如果調(diào)用字符串小于參數(shù)字符串,則返回負(fù)整數(shù)。
- 如果調(diào)用字符串大于參數(shù)字符串,則返回正整數(shù)。
- 如果兩個(gè)字符串相等,則返回0。
- 示例:
String str1 = "apple"; String str2 = "banana"; int result = str1.compareTo(str2); // result 小于 0,因?yàn)?"apple" 在字典順序中排在 "banana" 之前
compareToIgnoreCase()
方法:
compareToIgnoreCase()
方法也用于按字典順序比較兩個(gè)字符串,并返回一個(gè)整數(shù)值。與compareTo()
不同的是,compareToIgnoreCase()
方法在比較時(shí)不區(qū)分大小寫。- 示例:
String str1 = "apple"; String str2 = "Banana"; int result = str1.compareToIgnoreCase(str2); // result 小于 0,因?yàn)?"apple" 在忽略大小寫并按字典順序中排在 "Banana" 之前
這些方法是基于 Unicode 值來比較字符串的。在比較字符串時(shí),JVM會(huì)逐個(gè)比較字符串中對(duì)應(yīng)位置上的字符的 Unicode 值。如果在某個(gè)位置發(fā)現(xiàn)不同的字符,則根據(jù)這些字符的 Unicode 值來確定整體的大小關(guān)系。
總的來說,compareTo()
和 compareToIgnoreCase()
方法都是在對(duì)字符串進(jìn)行比較排序時(shí)非常有用的工具,可以幫助我們確定字符串在字典序中的位置關(guān)系。
4.截取字符串
在 Java 中,String
類的 substring()
方法用于從原始字符串中提取子字符串。這個(gè)方法有兩個(gè)重載形式,一個(gè)是通過指定開始索引的方式提取子字符串,另一個(gè)是同時(shí)指定開始索引和結(jié)束索引來提取子字符串。下面是關(guān)于這兩種形式的介紹:
substring(int beginIndex)
方法:- 這個(gè)方法接受一個(gè)整數(shù)參數(shù)
beginIndex
,表示子字符串的起始索引(包括beginIndex
對(duì)應(yīng)的字符)。 - 返回一個(gè)新的字符串,包含從
beginIndex
到原始字符串結(jié)尾的所有字符。 - 示例:
- 這個(gè)方法接受一個(gè)整數(shù)參數(shù)
String str = "Hello, World!"; String subStr = str.substring(7); // subStr 等于 "World!"
substring(int beginIndex, int endIndex)
方法:- 這個(gè)方法接受兩個(gè)整數(shù)參數(shù)
beginIndex
和endIndex
,分別表示子字符串的起始索引(包括beginIndex
對(duì)應(yīng)的字符)和結(jié)束索引(不包括endIndex
對(duì)應(yīng)的字符)。 - 返回一個(gè)新的字符串,包含在
beginIndex
和endIndex
之間的字符(不包括endIndex
對(duì)應(yīng)的字符)。 - 示例:
- 這個(gè)方法接受兩個(gè)整數(shù)參數(shù)
String str = "Hello, World!"; String subStr = str.substring(7, 12); // subStr 等于 "World"
需要注意的是,beginIndex
表示子字符串的起始索引,而 endIndex
是不包含在子字符串內(nèi)的。如果需要提取整個(gè)字符串,可以不指定 endIndex
,這樣會(huì)提取從 beginIndex
到字符串末尾的所有字符。
在使用 substring()
方法時(shí),必須確保提供的索引在有效范圍內(nèi),否則會(huì)拋出 IndexOutOfBoundsException
異常。這個(gè)方法在處理字符串時(shí)經(jīng)常用到,可以幫助我們從一個(gè)較長的字符串中提取需要的子串。
5.去除首尾空格
在 Java 中,String
類中的 trim()
方法和 split()
方法是常用的字符串處理方法,用于去除字符串的空白字符和拆分字符串成為子字符串。以下是它們的介紹:
trim()
方法:trim()
方法用于去除字符串的首尾空白字符(空格、制表符、換行符等),返回一個(gè)新的字符串,不修改原始字符串。- 示例:
String str = " Hello, World! "; String trimmedStr = str.trim(); // trimmedStr 等于 "Hello, World!"
- 注意:
trim()
方法只去除首尾的空白字符,中間的空白字符不會(huì)被刪除。
6.用指定的字符分隔字符串
split()
方法:
split()
方法根據(jù)指定的分隔符將字符串拆分成子字符串,返回一個(gè)字符串?dāng)?shù)組。- 可以提供一個(gè)正則表達(dá)式作為分隔符,或者直接提供一個(gè)普通字符串作為分隔符。
- 該方法支持傳入一個(gè)限制參數(shù),用于限制拆分得到的字符串?dāng)?shù)組的長度。
- 示例:
String str = "apple,banana,grape,orange"; String[] fruits = str.split(","); // fruits 數(shù)組包含 ["apple", "banana", "grape", "orange"] // 使用限制參數(shù),最多拆分出兩個(gè)子字符串 String[] firstTwoFruits = str.split(",", 2); // firstTwoFruits 數(shù)組包含 ["apple", "banana,grape,orange"]
- 如果分隔符在字符串的開頭或結(jié)尾,則
split()
方法會(huì)在結(jié)果數(shù)組中產(chǎn)生空字符串。如果不想包含空字符串,可以結(jié)合使用正則表達(dá)式\\s*,\\s*
來去除可能存在的空格。
這兩個(gè)方法是 Java 中經(jīng)常用到的字符串處理方法,能夠幫助我們對(duì)字符串進(jìn)行清洗、分割等操作,使得字符串處理更加方便和靈活。
7.替換
在 Java 中,String
類中的 replace()
和 replaceAll()
方法都用于替換字符串中的字符或子字符串,但它們有一些區(qū)別。以下是它們的介紹:
replace()
方法:replace()
方法用于將指定字符或字符序列替換為新的字符或字符序列。- 這個(gè)方法有兩個(gè)重載形式:一種接受兩個(gè)字符參數(shù),另一種接受兩個(gè)字符串參數(shù)。
- 示例:
String str1 = "Hello, World!"; String replacedStr1 = str1.replace('o', '*'); // replacedStr1 等于 "Hell*, W*rld!" String str2 = "apple,banana,orange"; String replacedStr2 = str2.replace(",", ";"); // replacedStr2 等于 "apple;banana;orange"
replaceAll()
方法:replaceAll()
方法用于使用正則表達(dá)式替換字符串中的字符或字符序列。- 這個(gè)方法接受兩個(gè)參數(shù):一個(gè)正則表達(dá)式用于匹配,一個(gè)字符串用于替換匹配到的內(nèi)容。
- 示例:
String str = "Hello, World!"; String replacedStr = str.replaceAll("o", "*"); // replacedStr 等于 "Hell*, W*rld!"
- 正則表達(dá)式的強(qiáng)大之處在于可以實(shí)現(xiàn)更復(fù)雜的匹配和替換邏輯,例如替換所有數(shù)字或特定模式的字符。
- replaceAll的第一個(gè)參數(shù)是替換規(guī)則。
- 示例:
String str="hello world zhangsan"; String temp=str.replaceAll("world|zhangsan","Java");
關(guān)于兩者的區(qū)別:
replace()
方法的參數(shù)是普通的字符或字符序列,不支持正則表達(dá)式,因此只能替換具體的字符或子字符串。replaceAll()
方法的第一個(gè)參數(shù)是正則表達(dá)式,因此可以進(jìn)行更靈活、復(fù)雜的匹配和替換操作。這使得replaceAll()
可以替換更廣泛的模式,而不僅限于具體的字符或子字符串替換。
通過使用 replace()
和 replaceAll()
方法,我們可以輕松地對(duì)字符串進(jìn)行替換操作,從而實(shí)現(xiàn)各種處理需求。
8.轉(zhuǎn)換大小寫
在 Java 中,toLowerCase()
和 toUpperCase()
方法是用于將字符串轉(zhuǎn)換為小寫和大寫形式的方法。以下是它們的介紹:
toLowerCase()
方法:toLowerCase()
方法用于將字符串中的所有字符轉(zhuǎn)換為小寫形式。- 這個(gè)方法不會(huì)修改原始字符串,而是返回一個(gè)新的字符串,其中所有字符都被轉(zhuǎn)換為小寫。
- 示例:
String str = "Hello, World!"; String lowerCaseStr = str.toLowerCase(); // lowerCaseStr 等于 "hello, world!"
toUpperCase()
方法:toUpperCase()
方法用于將字符串中的所有字符轉(zhuǎn)換為大寫形式。- 類似于
toLowerCase()
方法,toUpperCase()
也不會(huì)修改原始字符串,而是返回一個(gè)新的字符串,其中所有字符都被轉(zhuǎn)換為大寫。 - 示例:
String str = "Hello, World!"; String upperCaseStr = str.toUpperCase(); // upperCaseStr 等于 "HELLO, WORLD!"
這兩個(gè)方法非常實(shí)用,可以用于在不改變?cè)甲址那闆r下,將字符串內(nèi)容統(tǒng)一轉(zhuǎn)換為相應(yīng)的大小寫形式。在許多文本處理的情景中,這些轉(zhuǎn)換操作是很常見的。
一些需要注意的地方:
- 這兩個(gè)方法會(huì)考慮轉(zhuǎn)換為每個(gè)字符的對(duì)應(yīng)大小寫形式。在某些語言或特殊情況下,這種轉(zhuǎn)換可能會(huì)產(chǎn)生一些意想不到的結(jié)果,因此需要謹(jǐn)慎使用。
- 在進(jìn)行大小寫轉(zhuǎn)換時(shí),需要考慮不同語言的特殊字符和轉(zhuǎn)換規(guī)則,以確保轉(zhuǎn)換的準(zhǔn)確性。
9.查詢字符串中一個(gè)字串出現(xiàn)的起始位置
在 Java 中,indexOf()
和 lastIndexOf()
方法用于在字符串中查找特定子字符串第一次出現(xiàn)的位置和最后一次出現(xiàn)的位置。以下是它們的介紹:
indexOf()
方法:indexOf()
方法用于在字符串中查找指定子字符串第一次出現(xiàn)的位置。- 可以選擇提供子字符串和(可選)起始搜索位置作為參數(shù)。
- 如果找到子字符串,則返回該子字符串第一次出現(xiàn)的索引;如果未找到,則返回 -1。
- 示例:
String str = "Hello, World!"; int index = str.indexOf("o"); // 返回 4,因?yàn)榈谝粋€(gè) "o" 出現(xiàn)在索引位置 4
lastIndexOf()
方法:lastIndexOf()
方法用于在字符串中查找指定子字符串最后一次出現(xiàn)的位置。- 可以選擇提供子字符串和(可選)起始搜索位置作為參數(shù)。
- 如果找到子字符串,則返回該子字符串最后一次出現(xiàn)的索引;如果未找到,則返回 -1。
- 示例:
String str = "Hello, World!"; int index = str.lastIndexOf("o"); // 返回 8,因?yàn)樽詈笠粋€(gè) "o" 出現(xiàn)在索引位置 8
這兩個(gè)方法對(duì)于在字符串中查找特定子字符串的位置非常有用。如果您想要知道子字符串在字符串中的位置或者需要定位特定字符的位置,indexOf()
和 lastIndexOf()
是很方便的工具。記住,索引是從0開始計(jì)數(shù)的,即第一個(gè)字符的索引為0。
10.查詢字符串中是否包含另一個(gè)子串
在 Java 中,contains()
方法用于檢查一個(gè)字符串是否包含另一個(gè)指定的子字符串。以下是它的介紹:
contains()
方法:contains()
方法用于檢查字符串中是否包含指定的子字符串。如果包含指定的子字符串,則返回
true
;如果不包含,則返回false
。這個(gè)方法是區(qū)分大小寫的,因此在比較時(shí)會(huì)考慮字符的大小寫情況。
示例:
String str = "Hello, World!"; boolean contains1 = str.contains("Hello"); // 返回 true,因?yàn)樽址邪幼址?"Hello" boolean contains2 = str.contains("world"); // 返回 false,因?yàn)樽址胁话幼址?"world"(大小寫不匹配)
contains()
方法通常用于檢查一個(gè)字符串是否包含另一個(gè)字符串,以便在邏輯判斷或執(zhí)行某些操作時(shí)確定是否存在特定內(nèi)容。作為字符串類的一部分,這個(gè)方法是字符串操作中非常常用的一個(gè)函數(shù)。
請(qǐng)注意,contains()
方法只檢查是否包含指定的子字符串,而不提供子字符串的位置。如果您需要找到子字符串的位置,應(yīng)該使用 indexOf()
或 lastIndexOf()
方法。
11.查詢字符串是否是以一個(gè)子串開頭,或是以一個(gè)子串結(jié)尾
在 Java 中,startsWith()
方法和 endsWith()
方法用于檢查字符串是否以指定的前綴開頭或者以指定的后綴結(jié)尾。以下是它們的介紹:
startsWith()
方法:startsWith()
方法用于檢查字符串是否以指定的前綴開頭。- 接受一個(gè)參數(shù),即要檢查的前綴字符串。
- 如果字符串以指定的前綴開頭,則返回
true
;否則返回false
。 - 比較是區(qū)分大小寫的。
- 示例:
String str = "Hello, World!"; boolean startsWithHello = str.startsWith("Hello"); // 返回 true,因?yàn)樽址?"Hello" 開頭 boolean startsWithHi = str.startsWith("Hi"); // 返回 false,因?yàn)樽址灰?"Hi" 開頭
endsWith()
方法:endsWith()
方法用于檢查字符串是否以指定的后綴結(jié)尾。- 接受一個(gè)參數(shù),即要檢查的后綴字符串。
- 如果字符串以指定的后綴結(jié)尾,則返回
true
;否則返回false
。 - 比較是區(qū)分大小寫的。
- 示例:
String str = "Hello, World!"; boolean endsWithWorld = str.endsWith("World!"); // 返回 true,因?yàn)樽址?"World!" 結(jié)尾 boolean endsWithJava = str.endsWith("Java"); // 返回 false,因?yàn)樽址灰?"Java" 結(jié)尾
startsWith()
和 endsWith()
方法常用于檢查字符串的特定前綴和后綴,這對(duì)于處理文件擴(kuò)展名、URL等具有特定格式的字符串時(shí)非常有用。這些方法提供了檢查字符串開頭和結(jié)尾的簡單而有效的方式。
12.判斷字符串是否為空
在 Java 中,isEmpty()
方法用于檢查一個(gè)字符串是否為空,即其長度是否為0。以下是它的介紹:
isEmpty()
方法:isEmpty()
方法用于檢查字符串是否為空,即字符串的長度是否為0。如果字符串為空,則返回
true
;如果字符串不為空(長度大于0),則返回false
。示例:
String str1 = ""; // 空字符串 String str2 = "Hello, World!"; // 非空字符串 boolean empty1 = str1.isEmpty(); // 返回 true,因?yàn)樽址疄榭? boolean empty2 = str2.isEmpty(); // 返回 false,因?yàn)樽址粸榭?/pre>
isEmpty()
方法通常用于檢查字符串是否包含任何字符。這是一個(gè)方便的方法,特別適用于需要確保字符串不包含任何內(nèi)容時(shí)。在一些情況下,避免嘗試處理空字符串可以提高代碼的健壯性,因此在需要時(shí)應(yīng)該使用這個(gè)方法來驗(yàn)證字符串是否為空。
到此這篇關(guān)于Java中String類常用的各種方法的文章就介紹到這了,更多相關(guān)Java String類常用方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java批量操作文件系統(tǒng)的實(shí)現(xiàn)示例
文件上傳和下載是java web中常見的操作,本文主要介紹了Java批量操作文件系統(tǒng)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03SpringBoot+jpa配置如何根據(jù)實(shí)體類自動(dòng)創(chuàng)建表
這篇文章主要介紹了SpringBoot+jpa配置如何根據(jù)實(shí)體類自動(dòng)創(chuàng)建表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11java 音頻轉(zhuǎn)換wav格式標(biāo)準(zhǔn)音頻的操作
這篇文章主要介紹了java 音頻轉(zhuǎn)換wav格式標(biāo)準(zhǔn)音頻的操作,主要是使用ffmpeg命令進(jìn)行轉(zhuǎn)換,該工具類主要是為了將各類音頻轉(zhuǎn)為wav標(biāo)準(zhǔn)格式,其中可以調(diào)節(jié)采樣率、聲道數(shù)等指標(biāo),依賴maven環(huán)境,需要的朋友可以參考下2021-10-10SpringBoot如何整合redis實(shí)現(xiàn)過期key監(jiān)聽事件
這篇文章主要介紹了SpringBoot如何整合redis實(shí)現(xiàn)過期key監(jiān)聽事件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09深入探究 spring-boot-starter-parent的作用
這篇文章主要介紹了spring-boot-starter-parent的作用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的小伙伴可以跟著小編一起來學(xué)習(xí)一下2023-05-05spring boot 防止重復(fù)提交實(shí)現(xiàn)方法詳解
這篇文章主要介紹了spring boot 防止重復(fù)提交實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了spring boot 防止重復(fù)提交具體配置、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下2019-11-11詳解java.lang.reflect.Modifier.isInterface()方法
這篇文章主要介紹了詳解java.lang.reflect.Modifier.isInterface()方法的相關(guān)資料,這里提供實(shí)例幫助大家理解這個(gè)方法的使用,需要的朋友可以參考下2017-09-09Java實(shí)戰(zhàn)之基于I/O流設(shè)計(jì)的圖書管理系統(tǒng)
這篇文章主要介紹了Java實(shí)戰(zhàn)之基于I/O流設(shè)計(jì)的圖書館管理系統(tǒng),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04Java通過PowerMockito和Mokito進(jìn)行單元測試的實(shí)現(xiàn)
PowerMockito和Mockito都是Java語言中的測試框架,用于進(jìn)行單元測試和集成測試,本文就來詳細(xì)的介紹一下通過PowerMockito和Mokito進(jìn)行單元測試,感興趣的可以了解一下2023-08-08