Java中定義了String 和 StringBuffer 兩個類來封裝字符串,並提供了一系列操作字符串的方法。由於它們都位於 java.lang 包中,所以不需要導包就可以直接使用。
字符串的特點:
- 字符串是常量,字符串的內容是不可改變的
- 正是因爲字符串不可改變,所以字符串是可以共享使用的
- 字符串效果上相當於是 char[] 字符數組,但是底層原理是 byte[] 字節數組
字符串常量池:程序當中直接寫上的雙引號字符串,就在字符串常量池中
String 類的初始化
- 使用字符串常量直接初始化一個 String 對象
String 變量名 = "字符串";
String str1 = null; //初始化爲空
String str2 = ""; //初始化爲空字符串
String str3 = "abc"; //初始化爲 abc
在初始化字符串對象時,既可以將字符串對象的初始化值設爲空,也可以是一個具體的字符串。
- 使用 String 的構造方法初始化字符串對象
String 變量名 = new String("字符串");
String類中包含多個構造方法:
String() //創建一個內容爲空的字符串
String(String value) //根據指定的字符串內容 創建對象
String(char[] value) //根據指定的字符數組 創建對象
package com.wang.string.demo1;
public class StringDemo1 {
public static void main(String[] args) {
//創建一個空的字符串
String s1 = new String();
//創建一個內容爲 abc 的字符串
String s2 = new String("abc");
//創建一個內容爲字符數組的字符串
char[] chars = {'A', 'B', 'C'};
String s3 = new String(chars);
System.out.println("a" + s1 + "b"); //s1爲 " " 空,使用連接符+連接
System.out.println(s2); //abc
System.out.println(s3); //ABC
}
}
String 類的常見操作
注意:String類中有許多方法
int indexOf(int ch) 獲取指定字符在此字符串中第一次出現處的索引
int lastIndexOf(int ch) 獲取指定字符在此字符串中最後一次出現處的索引
int indexOf(String str) 獲取指定字符串在此字符串中第一次出現處的索引
int lastIndexOf(String str) 獲取指定字符串在此字符串中最後一次出現處的索引
-------------------------------------------------------------------------
int length() 獲取此字符串的長度
char charAt(int index) 獲取字符串中index位置上的字符,其中index的取值範圍是:0~(字符串長度-1)
boolean endsWith(String suffix) 判斷此字符串是否以指定的字符串結尾
boolean equals(Object anObject) 將此字符串與指定的字符串比較,區分大小寫
boolean equalsIgnoreCase(String anotherString) 將此字符串與指定的字符串比較,忽略大小寫
-------------------------------------------------------------------------
boolean isEmpty() 當且僅當字符串的長度爲0時返回 true
boolean startsWith(String prefix) 判斷字符串是否以指定的字符串開始
String toLowerCase() 將String中的所有字符都轉換爲小寫
String toUpperCase() 將String中的所有字符都轉換爲大寫
-------------------------------------------------------------------------
char[] toCharArray() 將此字符串轉換爲一個字符數組
String trim() 返回一個新字符串,它去除了原字符串首尾的空格
static String valueOf(int i) 將int參數轉換爲String類型字符串
String replace(CharSequence oldstr, CharSequence newstr)
返回一個新的字符串,它是通過用newstr替換此字符串中出現的所有oldstr得到的
-------------------------------------------------------------------------
boolean contains(CharSequence cs) 判斷此字符串中是否包含指定的字符序列
String substring(int beginIndex)
截取一個新的字符串,它包含從指定的beginIndex起始角標處開始,直到此字符串末尾的所有字符
String substring(int beginIndex, int endIndex)
截取一個新的字符串,它包含從指定的beginIndex起始角標處開始,直到索引endIndex-1角標處的所有字符
備註:左閉右開,包含左邊,不包含右邊
String[] split(String regex)
根據參數regex,將字符串分割爲若干個子字符串,注意:regex是一個正則表達式,用於限定分割規則
如果按照英文的句點"."進行分割,必須寫成"\\."(前面加上兩個反斜槓)
byte[] getByte() 獲得當前字符串底層的字節數組
- 字符串的基本操作
對字符串的基本操作,如獲得字符串的長度,獲得指定位置的字符等。
package com.wang.string.demo1;
public class StringDemo2 {
public static void main(String[] args) {
//初始化字符串
String s = "abcabcbacdba";
System.out.println("字符串的長度爲:" + s.length()); //12
System.out.println("字符串中第一個字符爲:" + s.charAt(0)); //a
System.out.println("字符 c 第一次出現的位置:" + s.indexOf('c')); //2
System.out.println("字符 c 最後一次出現的位置:" + s.lastIndexOf('c')); //8
System.out.println("'ab'字符串第一次出現的位置:" + s.indexOf("ab")); //0
System.out.println("'ab'字符串最後一次出現的位置:" + s.lastIndexOf("ab")); //3
}
}
- 字符串的轉換操作
程序開發中,有時需要對字符串進行轉換操作,例如將字符串轉換成字符數組,將字符串中的字符進大小寫轉換等。其中 valueOf() 方法有很多重載的形式,float,double,char等其他基本類型的數據都可以通過該方法轉換爲 String 字符串類型。
package com.wang.string.demo1;
public class StringDemo3 {
public static void main(String[] args) {
String s = "java";
char[] charArray = s.toCharArray();
System.out.print("將字符串轉換爲字符數組的遍歷結果:");
for (int i = 0; i < charArray.length; i++) {
//如果不是數組的最後一個元素,在元素後面加逗號
if (i != charArray.length - 1) {
System.out.print(charArray[i] + ",");
}else {
//數組的最後一個元素後面不加逗號
System.out.println(charArray[i]);
}
}
System.out.println("將int值轉換爲String類型之後的結果:" + String.valueOf(12));
System.out.println("將字符串轉換成大寫之後的結果:" + s.toUpperCase());
}
}
--------------------------------------------------------------------------------------
結果:
將字符串轉換爲字符數組的遍歷結果:j,a,v,a
將int值轉換爲String類型之後的結果:12
將字符串轉換成大寫之後的結果:JAVA
- 字符串的替換和去除空格操作
在程序開發過程中,需要考慮到用戶輸入數據時會有一些錯誤和空格的情況,這時可以使用 String 類的 replace() 和 trim() 方法,進行字符串的替換和去除空格操作。
package com.wang.string.demo1;
public class StringDemo4 {
public static void main(String[] args) {
String s = " http :// localhost : 8080";
//字符串去除空格操作
System.out.println("去除字符串兩端空格後的結果:" + s.trim());
//字符串替換操作
System.out.println("去除字符串中所有空格後的結果:" + s.replace(" ", ""));
}
}
------------------------------------------------------------------------------------
結果:
去除字符串兩端空格後的結果:http :// localhost : 8080
去除字符串中所有空格後的結果:http://localhost:8080
注意:
trim()方法只能去除兩端的空格,不能去除中間的空格。若想去除字符串中間的空格,
則可以通過 String類的 replace()方法來實現。
- 字符串的判斷操作
操作字符串時,有時候需要對一些字符串進行一些判斷,如判斷字符串是否以指定的字符串開始,結束,是否包含指定字符串,字符串是否爲空等。
package com.wang.string.demo1;
public class StringDemo5 {
public static void main(String[] args) {
String s1 = " Starter"; //聲明一個字符串
String s2 = "St";
System.out.println("判斷是否以字符串St開頭:" + s1.startsWith("St"));
System.out.println("判斷是否以字符串er結尾:" + s1.endsWith("er"));
System.out.println("判斷是否包含字符串ar:" + s1.contains("ar"));
System.out.println("判斷字符串是否爲空:" + s1.isEmpty());
System.out.println("判斷兩個字符串是否相等:" + s1.equals(s2));
}
}
-----------------------------------------------------------------------------------
結果:
判斷是否以字符串St開頭:false
判斷是否以字符串er結尾:true
判斷是否包含字符串ar:true
判斷字符串是否爲空:false
判斷兩個字符串是否相等:false
在程序中可以通過 == 和 equals() 兩種方式對字符串進行比較,equals() 方法用於比較兩個字符串中的字符值(即內容)是否相等。== 方法用於比較兩個字符串對象的內存地址是否相等。對於兩個字符串對象,當他們的字符值完全相同時,使用 equals 判斷結果會是 true,但是使用 == 判斷時,結果爲 false。
使用 equals 方法的注意事項:
-
equals方法具有對稱性,也就是 a.equals(b) 和 b.equals(a) 效果一樣
-
如果比較雙方一個是常量,一個是變量,推薦把常量字符串放在前面
推薦:“abc”.equals(str) ,防止出現空指針異常
String str1 = new String("abc");
String str2 = new String("abc");
//結果爲false,因爲 str1和str2 是兩個對象
System.out.println(str1 == str2);
//結果爲true,因爲 str1和str2 字符內容相同
System.out.println(str1.equals(str2));
- 字符串的截取和分割
在String類中針對字符串的截取和分割操作提供了兩個方法,其中,substring() 方法用於截取字符串的一部分,split() 方法可以將字符串按照某個字符進行分割。
package com.wang.string.demo1;
public class StringDemo6 {
public static void main(String[] args) {
String str = "2020-02-02";
//字符串截取操作
System.out.println("從第6個字符截取到末尾的結果:" + str.substring(5));
System.out.println("從第6個字符截取到第7個字符的結果:" + str.substring(5, 7));
//字符串分割操作
System.out.print("分割後的字符串數組中的元素依次爲:");
//通過橫線連接符 "-" 將字符串轉換爲字符數組
String[] strArray = str.split("-");
//循環輸出數組中的元素
for (int i = 0; i < strArray.length; i++) {
if (i != strArray.length - 1) {
//如果不是數組的最後一個元素,在元素後面加逗號
System.out.print(strArray[i] + ",");
}else {
//數組的最後一個元素後面不加逗號
System.out.println(strArray[i]);
}
}
}
}
----------------------------------------------------------------------------------
結果:
從第6個字符截取到末尾的結果:02-02
從第6個字符截取到第7個字符的結果:02
分割後的字符串數組中的元素依次爲:2020,02,02
注意:
因爲字符串的字符索引是從0開始的,所以截取字符串中第6個字符,它的字符索引就是5;
split()方法會根據指定的符號 - 將字符串分割成三部分,並存放在一個String類型的
數組中,使用for循環遍歷數組即可。
注意:
String 字符串在獲取某個字符時,會用到字符的索引,當訪問字符串中的字符時,如果字符的索引不存在,則會發生 StringIndexOutOfBoundsException(字符串角標越界異常),訪問字符串中的字符時,不能超出字符的索引範圍,否則會出現異常。