搞Java開發(fā)的小伙伴們,相信都會(huì)對(duì)`String`類不陌生吧。沒錯(cuò),就是這個(gè)類,讓我們?cè)诰帉慗ava代碼時(shí),能夠表現(xiàn)出以下這種操作:
```java
String str = "Hello, World!";
System.out.println(str.charAt(0)); // 輸出 H
System.out.println(str.length()); // 輸出 13
System.out.println(str.indexOf("World")); // 輸出 7
```
這些語句看似非常簡(jiǎn)單,但實(shí)際上每一個(gè)細(xì)節(jié)都需要我們深入了解`String`類才能掌握,下面就讓我們來詳細(xì)了解一下這個(gè)類吧。
一、概述
在Java中,`String`類是不可變的。換句話說,一旦我們創(chuàng)建了一個(gè)字符串,就無法再修改它的內(nèi)容。這跟Java的基本數(shù)據(jù)類型是有區(qū)別的。例如,我們可以這樣修改一個(gè)`int`類型的變量:
```java
int num = 10;
num = num + 1; // 將num的值增加1
```
但是對(duì)于一個(gè)`String`類型的變量,我們就不能這樣做:
```java
String str = "Hello";
str = str + "World"; // 這里相當(dāng)于創(chuàng)建了一個(gè)新的字符串,然后將它賦給str變量
```
由于`String`是不可變的,因此我們?cè)诰帉懗绦驎r(shí)要注意不要頻繁地創(chuàng)建新的字符串。否則,如果在循環(huán)體中創(chuàng)建了大量的`String`對(duì)象,它可能會(huì)導(dǎo)致內(nèi)存占用過高,從而影響程序的性能。
二、字符串的創(chuàng)建
在Java中,有多種方式可以創(chuàng)建字符串對(duì)象。下面我們簡(jiǎn)單介紹一下它們。
1. 直接使用雙引號(hào)("")創(chuàng)建字符串
這是最常用的創(chuàng)建字符串的方式。例如:
```java
String str = "Hello, World!";
```
2. 使用`new`關(guān)鍵字創(chuàng)建字符串
使用`new`關(guān)鍵字創(chuàng)建字符串其實(shí)是用到了`String`類的構(gòu)造器。例如:
```java
String str = new String("Hello, World!");
```
這種方式創(chuàng)建字符串的效果與使用雙引號(hào)創(chuàng)建并沒有什么區(qū)別,但它有一個(gè)小小的副作用,即創(chuàng)建了兩個(gè)不同的對(duì)象。也就是說,這種方式會(huì)在堆中創(chuàng)建一個(gè)新的字符串對(duì)象,不過,這種方式的使用場(chǎng)景非常少,我們?cè)趯?shí)際開發(fā)中不需要使用它。
3. 使用`+`操作符進(jìn)行字符串拼接
在`String`類中,我們可以使用`+`操作符將多個(gè)字符串拼接在一起。例如:
```java
String str = "Hello" + ", " + "World" + "!";
```
這種方式看似方便,但實(shí)際上,在拼接多個(gè)字符串時(shí)也需要非常謹(jǐn)慎。因?yàn)槊恳淮纹唇佣紩?huì)創(chuàng)建一個(gè)新的字符串,如果字符串較長,頻繁拼接將可能導(dǎo)致內(nèi)存占用過高。
4. 使用`StringBuffer`或`StringBuilder`類進(jìn)行字符串拼接
和使用`+`操作符進(jìn)行字符串拼接不同,`StringBuffer`和`StringBuilder`可以有效地避免頻繁創(chuàng)建字符串的問題。它們可以在內(nèi)部維護(hù)一個(gè)可變長度的字符數(shù)組,以便我們可以動(dòng)態(tài)地修改字符串。例如:
```java
StringBuilder sb = new StringBuilder("Hello");
sb.append(", ");
sb.append("World");
sb.append("!");
String str = sb.toString(); // 將StringBuilder對(duì)象轉(zhuǎn)換為字符串
```
三、字符串的常用操作
除了字符串的創(chuàng)建,在日常開發(fā)中,我們還需要對(duì)字符串進(jìn)行一些操作,例如獲取字符串的長度、截取子串、查找字符等等。下面我們就來一一介紹。
1. 獲取字符串的長度
要獲取字符串的長度,我們可以使用`length()`方法,例如:
```java
String str = "Hello, World!";
int len = str.length();
```
注意,`length()`方法返回的是字符串的長度,它的返回值類型是`int`,不是`long`類型。
2. 獲取子串
要獲取子串,我們可以使用`substring()`方法。它接受兩個(gè)參數(shù),第一個(gè)參數(shù)是要截取的子串的起始位置(從0開始),第二個(gè)參數(shù)是要截取的子串的結(jié)束位置(不包括該位置的字符)。例如:
```java
String str = "Hello, World!";
String subStr1 = str.substring(0, 5); // 獲取從0到5(不包括5)的子串,即"Hello"
String subStr2 = str.substring(7, 12); // 獲取從7到12(不包括12)的子串,即"World"
String subStr3 = str.substring(7); // 獲取從7到字符串末尾的子串,即"World!"
```
需要注意的是,如果我們指定的起始位置超出了字符串的長度,或結(jié)束位置超過了字符串的末尾,都會(huì)導(dǎo)致`IndexOutOfBoundsException`引發(fā)異常出現(xiàn)。
3. 查找字符
要查找字符,我們可以使用`charAt()`方法或`indexOf()`方法。`charAt()`方法接受一個(gè)整數(shù)作為參數(shù),返回字符串中指定位置的字符。例如:
```java
String str = "Hello, World!";
char ch1 = str.charAt(0); // 獲取第一個(gè)字符,即'H'
char ch2 = str.charAt(7); // 獲取第8個(gè)字符,即'W'
```
`indexOf()`方法用于查找一個(gè)字符或字符串在另一個(gè)字符串中第一次出現(xiàn)的位置。例如:
```java
String str = "Hello, World!";
int index1 = str.indexOf('W'); // 查找'W'字符在字符串中第一次出現(xiàn)的位置,即7
int index2 = str.indexOf("World"); // 查找"World"字符串在字符串中第一次出現(xiàn)的位置,即7
```
需要注意的是,如果我們要查找的字符或字符串在原字符串中不存在,`indexOf()`方法會(huì)返回-1。
4. 分割字符串
要分割字符串,我們可以使用`split()`方法。它接受一個(gè)正則表達(dá)式作為參數(shù),并返回一個(gè)由子串組成的數(shù)組。例如:
```java
String str = "Hello, World!";
String[] words = str.split("[,\\s]+"); // 分割字符串,以逗號(hào)和空格為分隔符
for (String word : words) {
System.out.println(word);
}
```
這里的正則表達(dá)式`[,\\s]+`表示以逗號(hào)或空格為分隔符。需要注意的是,`split()`方法返回的數(shù)組不包含分隔符。
5. 替換字符串
要替換字符串中的字符或子串,我們可以使用`replace()`方法。它接受兩個(gè)參數(shù),第一個(gè)參數(shù)是要被替換的字符或子串,第二個(gè)參數(shù)是用于替換的字符或子串。例如:
```java
String str = "Hello, World!";
String newStr1 = str.replace('l', 'L'); // 將所有的'l'字符替換為'L'字符
String newStr2 = str.replace("World", "Java"); // 將"World"字符串替換為"Java"字符串
```
需要注意的是,`replace()`方法返回的是一個(gè)新的字符串對(duì)象,原字符串不會(huì)被修改。
四、總結(jié)
至此,我們對(duì)`String`類的創(chuàng)建和常用操作已經(jīng)做了一個(gè)比較詳細(xì)的介紹了。當(dāng)然,`String`類的方法遠(yuǎn)不止這些,如果你在實(shí)際開發(fā)中遇到了需要用到它的方法,可以到官方文檔中仔細(xì)研究一下。好了,本文就到此為止了,希望能對(duì)你有所幫助。 www.yinyiprinting.cn 寧波海美seo網(wǎng)絡(luò)優(yōu)化公司 是網(wǎng)頁設(shè)計(jì)制作,網(wǎng)站優(yōu)化,企業(yè)關(guān)鍵詞排名,網(wǎng)絡(luò)營銷知識(shí)和開發(fā)愛好者的一站式目的地,提供豐富的信息、資源和工具來幫助用戶創(chuàng)建令人驚嘆的實(shí)用網(wǎng)站。 該平臺(tái)致力于提供實(shí)用、相關(guān)和最新的內(nèi)容,這使其成為初學(xué)者和經(jīng)驗(yàn)豐富的專業(yè)人士的寶貴資源。
聲明本文內(nèi)容來自網(wǎng)絡(luò),若涉及侵權(quán),請(qǐng)聯(lián)系我們刪除! 投稿需知:請(qǐng)以word形式發(fā)送至郵箱18067275213@163.com
本人推崇自然排名,哈哈!