字符串
?
1. 字符串
1.1 字符串概述和特點
java.lang.String類代表字符串。
API當中說:Java 程序中的所有字符串字面值(如 "abc" )都作為此類的實例實現。
其實就是說:程序當中所有的雙引號字符串,都是String類的對象。(就算沒有new,也照樣是。)
字符串的特點:
- ?字符串的內容永不可變。【重點】
- 正是因為字符串不可改變,所以字符串是可以共享使用的。
- 字符串效果上相當于是char[]字符數組,但是底層原理是byte[]字節數組。
1.2字符串的構造方法和直接創建
創建字符串的常見3+1種方式。
三種構造方法:
public String():創建一個空白字符串,不含有任何內容。
public String(char[] array):根據字符數組的內容,來創建對應的字符串。
public String(byte[] array):根據字節數組的內容,來創建對應的字符串。
一種直接創建:
String str = "Hello"; // 右邊直接用雙引號
注意:直接寫上雙引號,就是字符串對象。
1.2.1 案例代碼一
1 /* 2 java.lang.String類代表字符串。 3 API當中說:Java 程序中的所有字符串字面值(如 "abc" )都作為此類的實例實現。 4 其實就是說:程序當中所有的雙引號字符串,都是String類的對象。(就算沒有new,也照樣是。) 5 6 字符串的特點: 7 1. 字符串的內容永不可變。【重點】 8 2. 正是因為字符串不可改變,所以字符串是可以共享使用的。 9 3. 字符串效果上相當于是char[]字符數組,但是底層原理是byte[]字節數組。 10 11 創建字符串的常見3+1種方式。 12 三種構造方法: 13 public String():創建一個空白字符串,不含有任何內容。 14 public String(char[] array):根據字符數組的內容,來創建對應的字符串。 15 public String(byte[] array):根據字節數組的內容,來創建對應的字符串。 16 一種直接創建: 17 String str = "Hello"; // 右邊直接用雙引號 18 19 注意:直接寫上雙引號,就是字符串對象。 20 */ 21 public class Demo01String { 22 23 public static void main(String[] args) { 24 // 使用空參構造 25 String str1 = new String(); // 小括號留空,說明字符串什么內容都沒有。 26 System.out.println("第1個字符串:" + str1); 27 28 // 根據字符數組創建字符串 29 char[] charArray = { 'A', 'B', 'C' }; 30 String str2 = new String(charArray); 31 System.out.println("第2個字符串:" + str2); 32 33 // 根據字節數組創建字符串 34 byte[] byteArray = { 97, 98, 99 }; 35 String str3 = new String(byteArray); 36 System.out.println("第3個字符串:" + str3); 37 38 // 直接創建 39 String str4 = "Hello"; 40 System.out.println("第4個字符串:" + str4); 41 } 42 }
?
?1.3字符串常量池
字符串常量池:程序當中直接寫上的雙引號字符串,就在字符串常量池中。
對于基本類型來說,==是進行數值的比較。
對于引用類型來說,==是進行【地址值】的比較。
1.3.1案例代碼二
1 /* 2 字符串常量池:程序當中直接寫上的雙引號字符串,就在字符串常量池中。 3 4 對于基本類型來說,==是進行數值的比較。 5 對于引用類型來說,==是進行【地址值】的比較。 6 */ 7 public class Demo02StringPool { 8 9 public static void main(String[] args) { 10 String str1 = "abc"; 11 String str2 = "abc"; 12 13 char[] charArray = {'a', 'b', 'c'}; 14 String str3 = new String(charArray); 15 16 System.out.println(str1 == str2); // true 17 System.out.println(str1 == str3); // false 18 System.out.println(str2 == str3); // false 19 } 20 }
?
?1.4常見方法
1.4.1字符串的比較相關方法
=是進行對象的地址值比較,如果確實需要字符串的內容比較,可以使用兩個方法:public boolean equals(Object obj):參數可以是任何對象,只有參數是一個字符串并且內容相同的才會給true;否則返回false。
注意事項:1. 任何對象都能用Object進行接收。
2. equals方法具有對稱性,也就是a.equals(b)和b.equals(a)效果一樣。
3. 如果比較雙方一個常量一個變量,推薦把常量字符串寫在前面。
推薦:"abc".equals(str)??? 不推薦:str.equals("abc")
public boolean equalsIgnoreCase(String str):忽略大小寫,進行內容比較。
1.4.1.1案例代碼三
1 /* 2 ==是進行對象的地址值比較,如果確實需要字符串的內容比較,可以使用兩個方法: 3 4 public boolean equals(Object obj):參數可以是任何對象,只有參數是一個字符串并且內容相同的才會給true;否則返回false。 5 注意事項: 6 1. 任何對象都能用Object進行接收。 7 2. equals方法具有對稱性,也就是a.equals(b)和b.equals(a)效果一樣。 8 3. 如果比較雙方一個常量一個變量,推薦把常量字符串寫在前面。 9 推薦:"abc".equals(str) 不推薦:str.equals("abc") 10 11 public boolean equalsIgnoreCase(String str):忽略大小寫,進行內容比較。 12 */ 13 public class Demo01StringEquals { 14 15 public static void main(String[] args) { 16 String str1 = "Hello"; 17 String str2 = "Hello"; 18 char[] charArray = {'H', 'e', 'l', 'l', 'o'}; 19 String str3 = new String(charArray); 20 21 System.out.println(str1.equals(str2)); // true 22 System.out.println(str2.equals(str3)); // true 23 System.out.println(str3.equals("Hello")); // true 24 System.out.println("Hello".equals(str1)); // true 25 26 String str4 = "hello"; 27 System.out.println(str1.equals(str4)); // false 28 System.out.println("================="); 29 30 String str5 = null; 31 System.out.println("abc".equals(str5)); // 推薦:false 32 // System.out.println(str5.equals("abc")); // 不推薦:報錯,空指針異常NullPointerException 33 System.out.println("================="); 34 35 String strA = "Java"; 36 String strB = "java"; 37 System.out.println(strA.equals(strB)); // false,嚴格區分大小寫 38 System.out.println(strA.equalsIgnoreCase(strB)); // true,忽略大小寫 39 40 // 注意,只有英文字母區分大小寫,其他都不區分大小寫 41 System.out.println("abc一123".equalsIgnoreCase("abc壹123")); // false 42 } 43 }
1.4.2字符串的獲取相關方法
String當中與獲取相關的常用方法有:
public int length():獲取字符串當中含有的字符個數,拿到字符串長度。
public String concat(String str):將當前字符串和參數字符串拼接成為返回值新的字符串。
public char charAt(int index):獲取指定索引位置的單個字符。(索引從0開始。)
public int indexOf(String str):查找參數字符串在本字符串當中首次出現的索引位置,如果沒有返回-1值。
1.4.2.1案例代碼四
1 /* 2 String當中與獲取相關的常用方法有: 3 4 public int length():獲取字符串當中含有的字符個數,拿到字符串長度。 5 public String concat(String str):將當前字符串和參數字符串拼接成為返回值新的字符串。 6 public char charAt(int index):獲取指定索引位置的單個字符。(索引從0開始。) 7 public int indexOf(String str):查找參數字符串在本字符串當中首次出現的索引位置,如果沒有返回-1值。 8 */ 9 public class Demo02StringGet { 10 11 public static void main(String[] args) { 12 // 獲取字符串的長度 13 int length = "asdasfeutrvauevbueyvb".length(); 14 System.out.println("字符串的長度是:" + length); 15 16 // 拼接字符串 17 String str1 = "Hello"; 18 String str2 = "World"; 19 String str3 = str1.concat(str2); 20 System.out.println(str1); // Hello,原封不動 21 System.out.println(str2); // World,原封不動 22 System.out.println(str3); // HelloWorld,新的字符串 23 System.out.println("=============="); 24 25 // 獲取指定索引位置的單個字符 26 char ch = "Hello".charAt(1); 27 System.out.println("在1號索引位置的字符是:" + ch); 28 System.out.println("=============="); 29 30 // 查找參數字符串在本來字符串當中出現的第一次索引位置 31 // 如果根本沒有,返回-1值 32 String original = "HelloWorldHelloWorld"; 33 int index = original.indexOf("llo"); 34 System.out.println("第一次索引值是:" + index); // 2 35 36 System.out.println("HelloWorld".indexOf("abc")); // -1 37 38 System.out.println("=============="); 39 String str = "hello"; 40 str.concat("world"); 41 System.out.println(str); 42 } 43 }
1.4.3? ?字符串的截取方法
字符串的截取方法:
public String substring(int index):截取從參數位置一直到字符串末尾,返回新字符串。
public String substring(int begin, int end):截取從begin開始,一直到end結束,中間的字符串。
備注:[begin,end),包含左邊,不包含右邊。
1.4.3.1案例代碼五
1 /* 2 字符串的截取方法: 3 4 public String substring(int index):截取從參數位置一直到字符串末尾,返回新字符串。 5 public String substring(int begin, int end):截取從begin開始,一直到end結束,中間的字符串。 6 備注:[begin,end),包含左邊,不包含右邊。 7 */ 8 public class Demo03Substring { 9 10 public static void main(String[] args) { 11 String str1 = "HelloWorld"; 12 String str2 = str1.substring(5); 13 System.out.println(str1); // HelloWorld,原封不動 14 System.out.println(str2); // World,新字符串 15 System.out.println("================"); 16 17 String str3 = str1.substring(4, 7); 18 System.out.println(str3); // oWo 19 System.out.println("================"); 20 21 // 下面這種寫法,字符串的內容仍然是沒有改變的 22 // 下面有兩個字符串:"Hello","Java" 23 // strA當中保存的是地址值。 24 // 本來地址值是Hello的0x666, 25 // 后來地址值變成了Java的0x999 26 String strA = "Hello"; 27 System.out.println(strA); // Hello 28 strA = "Java"; 29 System.out.println(strA); // Java 30 } 31 }
1.4.4
1.1.1??? 字符串的轉換相關方法
String當中與轉換相關的常用方法有:
public char[] toCharArray():將當前字符串拆分成為字符數組作為返回值。
public byte[] getBytes():獲得當前字符串底層的字節數組。
public String replace(CharSequence oldString, CharSequence newString):
將所有出現的老字符串替換成為新的字符串,返回替換之后的結果新字符串。
備注:CharSequence意思就是說可以接受字符串類型。
1.4.4.1案例代碼六
1 /* 2 String當中與轉換相關的常用方法有: 3 4 public char[] toCharArray():將當前字符串拆分成為字符數組作為返回值。 5 public byte[] getBytes():獲得當前字符串底層的字節數組。 6 public String replace(CharSequence oldString, CharSequence newString): 7 將所有出現的老字符串替換成為新的字符串,返回替換之后的結果新字符串。 8 備注:CharSequence意思就是說可以接受字符串類型。 9 */ 10 public class Demo04StringConvert { 11 12 public static void main(String[] args) { 13 // 轉換成為字符數組 14 char[] chars = "Hello".toCharArray(); 15 System.out.println(chars[0]); // H 16 System.out.println(chars.length); // 5 17 System.out.println("=============="); 18 19 // 轉換成為字節數組 20 byte[] bytes = "abc".getBytes(); 21 for (int i = 0; i < bytes.length; i++) { 22 System.out.println(bytes[i]); 23 } 24 System.out.println("=============="); 25 26 // 字符串的內容替換 27 String str1 = "How do you do?"; 28 String str2 = str1.replace("o", "*"); 29 System.out.println(str1); // How do you do? 30 System.out.println(str2); // H*w d* y*u d*? 31 System.out.println("=============="); 32 33 String lang1 = "會不會玩兒呀!你大爺的!你大爺的!你大爺的!!!"; 34 String lang2 = lang1.replace("你大爺的", "****"); 35 System.out.println(lang2); // 會不會玩兒呀!****!****!****!!! 36 } 37 }
1.4.5? ?字符串的分割方法
分割字符串的方法:
public String[] split(String regex):按照參數的規則,將字符串切分成為若干部分。
注意事項:
split方法的參數其實是一個“正則表達式”,今后學習。
今天要注意:如果按照英文句點“.”進行切分,必須寫"\\."(兩個反斜杠)
1.4.5.1案例代碼七
1 /* 2 分割字符串的方法: 3 public String[] split(String regex):按照參數的規則,將字符串切分成為若干部分。 4 5 注意事項: 6 split方法的參數其實是一個“正則表達式”,今后學習。 7 今天要注意:如果按照英文句點“.”進行切分,必須寫"\\."(兩個反斜杠) 8 */ 9 public class Demo05StringSplit { 10 11 public static void main(String[] args) { 12 String str1 = "aaa,bbb,ccc"; 13 String[] array1 = str1.split(","); 14 for (int i = 0; i < array1.length; i++) { 15 System.out.println(array1[i]); 16 } 17 System.out.println("==============="); 18 19 String str2 = "aaa bbb ccc"; 20 String[] array2 = str2.split(" "); 21 for (int i = 0; i < array2.length; i++) { 22 System.out.println(array2[i]); 23 } 24 System.out.println("==============="); 25 26 String str3 = "XXX.YYY.ZZZ"; 27 String[] array3 = str3.split("\\."); 28 System.out.println(array3.length); // 0 29 for (int i = 0; i < array3.length; i++) { 30 System.out.println(array3[i]); 31 } 32 } 33 }
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?