文章目錄
- 一、String類型是什么
- String不可變的原因(經典面試題)
- String不可變的好處
- 二、String的常用構造形式
- 1.使用常量串構造
- 2.使用newString對象構造
- 3.字符串數組構造
- 三、常用方法
- 1. length() 獲取字符串的長度
- 2. charAt() 獲取字符串中指定字符的值 (代碼單元)
- 3. codePointAt() 獲取字符串中指定字符的值的代碼點(編碼值) (Ascll碼值)
- 4.equals() 比較字符串是否相等
- 【補充】(擴展) == 與 equals的區別
- 5.substring(a,b) 字符串截取 要a不要b 要頭不要尾
- 6.indexOf() 查找某個子字符串所在的位置 ,如果存在 返回第一次出現子串的具體位置的索引值,如果不存在 返回-1
- 7. lastIndexOf() 查找某個子字符串所在最后一次的位置,如果存在 返回最后一次出現子串的具體位置的索引值,如果不存在 返回-1
- 8.startsWith() 是否是以某個字串開頭的 ,如果是 返回true 如果不是 返回false
- 9.endsWith() 是否是以某個字串結尾的 , 如果 是 返回true 如果 不是 返回false
- 10.contains() 是否包含某個字串 , 如果 是 返回true 如果 不是 返回false
- 11.replace(olderchar,newchar)替換某個子字符串 replaceAll()替換所有
- 【擴展】[replace 與 replaceAll 的區別](https://blog.csdn.net/qq_55846232/article/details/140401676?spm=1001.2014.3001.5502)
- 12.toUpperCase() 把字母轉換成大寫
- 13.toLowerCase() 把字母轉換成小寫
- 14.trim() 去字符串開頭結尾空格
一、String類型是什么
String類型其實就是定義字符串的一種類型,它可以直接定義我們想要表示的字符串
String是不可變類型
String不可變的原因(經典面試題)
1.String是final類型的類,value也是final類型的數組,但這不是String不可變的根本原因,String不可變是因為value是private,且并沒有提供對外的get和set
2.底層char[]數組有final修飾,意味著這個數組不能擴容等,來達到存更多的字符,final修飾char類型數組,保證數組一旦被賦值 不能在重新賦值,修改char類型數組后,地址不能改變,內容可變,但是沒有具體的方法去修改內容
3.char[]數組是私有的,我們程序員無法直接操作這個char[]數組,而且String沒有提供這樣的方法,來修改char[]數組的元素的值。
String不可變的好處
可以共享,也是為了安全
二、String的常用構造形式
1.使用常量串構造
public static void main(String[] args) {String s1 = "asd";System.out.println(s1);}
運行結果:
asd
2.使用newString對象構造
public static void main(String[] args) {String s1 = new String("asdasd");System.out.println(s1);}
運行結果:
asdasd
3.字符串數組構造
public static void main(String[] args) {char[] array = {'h','e','l','l','o'};String s1 = new String(array);System.out.println(s1);}
運行結果:
hello
需要注意的是字符串數組里的數據要用單引號 ,不要使用雙引號。
三、常用方法
1. length() 獲取字符串的長度
String test = "asdasdasdasd";
System.out.println(test.length());
運行結果
12
2. charAt() 獲取字符串中指定字符的值 (代碼單元)
String test = "asdasdasdasd";
System.out.println(test.charAt(0));
運行結果
a
3. codePointAt() 獲取字符串中指定字符的值的代碼點(編碼值) (Ascll碼值)
String test = "asdasdasdasd";
System.out.println(test.codePointAt(0));
運行結果
97
4.equals() 比較字符串是否相等
String test = "asdasdasdasd";
String test1 = "aaaadddd";
System.out.println(test.equals(test1));
運行結果
false
【補充】(擴展) == 與 equals的區別
String str3 = new String(“123”) 在內存中傳遞過程 會開辟兩個或三個空間
String str1 = “123” 與String str3 = new String(“123”)不相同 是因為地址不同
== 在java中的含義是比較地址
首先 ,equals方法是不能作用與基本數據類型的變量
如果沒有對equals 方法進行重寫,則它比較的是引用類型變量的地址
像String、Data等類對equals方法進行了重寫的話,比較的是所指向的對象的內容
public static void main(String[] args) {String test = "asdasdasdasd";String test1 = new String("asdasdasdasd");System.out.println(test == test1);System.out.println(test.equals(test1));}
運行結果
false
true
5.substring(a,b) 字符串截取 要a不要b 要頭不要尾
String s1 = "asdasdasdasd";
System.out.println(s1.substring(0,4));
運行結果
asda
6.indexOf() 查找某個子字符串所在的位置 ,如果存在 返回第一次出現子串的具體位置的索引值,如果不存在 返回-1
String s1 = "asdasdasdasd";
System.out.println(s1.indexOf("a"));
System.out.println(s1.indexOf("a",1)); //1的意思是跳過一個字符 就是跳過a字符 在尋找
運行結果
0
3
7. lastIndexOf() 查找某個子字符串所在最后一次的位置,如果存在 返回最后一次出現子串的具體位置的索引值,如果不存在 返回-1
String test = "asdasdasdasd"
System.out.println(test.lastIndexOf("d"));
運行結果
11
8.startsWith() 是否是以某個字串開頭的 ,如果是 返回true 如果不是 返回false
String s1 = "asdasdasdasd";
System.out.println(s1.startsWith("as"));
System.out.println(s1.startsWith("sd"));
運行結果
true
false
9.endsWith() 是否是以某個字串結尾的 , 如果 是 返回true 如果 不是 返回false
String s1 = "asdasdasdasd";
System.out.println(s1.endsWith("as"));
System.out.println(s1.endsWith("sd"));
運行結果
false
true
10.contains() 是否包含某個字串 , 如果 是 返回true 如果 不是 返回false
String s1 = "asdasdasdasd";
System.out.println(s1.contains("as"));
運行結果
true
11.replace(olderchar,newchar)替換某個子字符串 replaceAll()替換所有
String s1 = "asdasdasdasd,\r";
System.out.println(s1.replace("as","11"));
System.out.println(s1.replaceAll("\r","*"));
運行結果
11d11d11d11d,
asdasdasdasd,*
【擴展】replace 與 replaceAll 的區別
12.toUpperCase() 把字母轉換成大寫
String s1 = "asdasdasdasd";
System.out.println(s1.toUpperCase());
運行結果:
ASDASDASDASD
13.toLowerCase() 把字母轉換成小寫
String s1 = "aSdAsDasdasd";
System.out.println(s1.toLowerCase());
運行結果
asdasdasdasd
14.trim() 去字符串開頭結尾空格
String s1 = " aSdAsDasdasds";
System.out.println(s1);
System.out.println(s1.trim());
運行結果
感謝大家的收看和支持 ,歡迎大家來指正!!!