一、String類的基本概述
1、API
Java.lang //不用導包
public final class String
String類代表字串。Java程式中的所有字串字面值(如:”abc“)都作為此類的執行個體實現。
即”abc“就是String類的執行個體對象。
2、重點理解
字串是常量;它的值在建立之後不能更改。解釋如下:
截圖來源:https://www.cnblogs.com/cisum/p/8011485.html
s只是一個String對象的引用,並不是對象本身。
字串常量池:
字串池是方法區中的一部分特殊儲存。當一個字串被建立的時候,首先會去這個字串池中尋找,如果找到,
直接返回對該字串的引用;
(也就是說,如果兩個字串的內容完全一樣,那麼他們的記憶體位址一定相等,且其實只有一份)
線程的安全性;
多線程操作之所以不安全,完全是因為多個子線程在同一時間內操作某個公開變數,且該變數在操作之後變數的值
會發生改變;因為String一旦建立之後,就無法再修改其值,所以,String是安全執行緒的;
3、建立與儲存機制(參筆試面試寶典)
4、如果直接列印對象的引用,會預設調用toString方法,如果返回的不是對象@雜湊地址,那麼toString方法就被重寫了。
String 類重寫了toString方法,返回的是該對象本身。
二、String類的構造方法(11種)
1、public String():空構造 空的字串
2、public String(byte[] bytes):把位元組數組轉成字串,解碼GBK byte[]
3、public String(byte[] bytes,int index, int length):把位元組數組的一部分轉換成字串,length是要轉換的長度 byte[]
4、public String(char[] value):將字元數群組轉換成字串 char[]
5、public String(char[] value,int index, int count):把字元數組的一部分轉換成字串
5、public String(String original):把字串常量值轉換成字串
三、常見面試題(掌握)
1、常量池中沒有這個對象就建立一個,有的話就直接用不用再建立了。指向同一個對象的引用的地址值是相同的
2、new String("abc");建立兩個對象,一個在常量池中,一個在堆記憶體中(字串的副本),地址值不一樣就是兩個對象。(前提是常量池中之前沒有abc,如果有的話這裡就建立一個對象)。
3、“+”,java語言提供對字串串聯符號+以及將其他對象轉換為字串的特殊支援。字串穿藍是通過先建立StringBuilder(StringBuffer)對象的append方法實現拼接,然後通過toString方法將字串返回。
記憶體配置圖示意:
flase
true
四、String類的判斷功能(掌握)
1、boolean equals(Object obj):比較字串的內容是否相同,區分大小寫
2、boolean equalsIgnoreCase(String str):比較字串的內容是否相同,忽略大小寫
3、boolean contains(String str):判斷大字串中是否包含小字串
4、boolean startWith(String str):判斷字串是否以某個指定的字串開頭
5、boolean endWith(String str):判斷字串是否以某個指定的字串結尾
6、4、boolean isEmpty():判斷字元是否為空白
null和“ ”的區別:
1、“ ”是字串常量,同事也是一個String類的對象,也可調用String類的方法
2、null是空常量,不能調用任何辦法,否則會出現null 指標異常
五、類比使用者登入
需求:類比登陸,給三次機會,並提示還有幾次。
使用者名稱和密碼都是admin
分析:
1、類比登陸,需要鍵盤錄入,Scanner
2、給三次機會,需要迴圈,for
3、並提示有幾次,需要判斷,if
import java.util.Scanner;;public class Test_monidenglu {public static void main(String[] args) { int count; for(int i = 1;i<=3;i++) { Scanner sc = new Scanner(System.in); System.out.println("請輸入使用者名稱:"); String name = sc.nextLine(); System.out.println("請輸入密碼:"); String password = sc.nextLine(); if (name.equals("admin") && password.equals("admin")) { System.out.println("成功登陸。"); break; }else { count = 3-i; System.out.println("您還有"+ count +"次機會"); System.out.println("請繼續輸入"); if(count ==0) { System.out.println("您的次數已用完,請聯絡客服找回使用者名稱和密碼"); } } }}}
六、String類的擷取功能(掌握)
1、int length():擷取字串的長度(每個字元的個數不是位元組長度),注意數組中的legth是屬性,而這裡是方法
2、char charAt(int index):擷取指定索引位置的字元
3、int indexOf(int ch):返回指定字元在此字串中第一次出現處的索引
4、int indexOf(String str):返回指定字串在此字串中第一次出現處的索引
5、int indexOf(int ch, int fromIndex):返回指定字元在此字串中從指定位置後第一次出現處的索引
6、lastIndexOf(String str):返回指定字串在此字串中最後一次出現的索引
7、String substring(int start):從指定位置開始截取字串,預設到末尾
8、String substring(int start,int end):從指定位置開始到指定位置結束截取字串,包含頭不包含尾
七、字串的遍曆
需求:遍曆字串
八、統計不同類型的字元個數
需求:統計一個字串中大寫字母字元,小寫字母字元,數字字元出現的次數,其他字元出現的次數
ABCDEabcd123456!@#$%^
public class Test_tongji {public static void main(String[] args) {int x = 0 ,y = 0, z=0, k=0;String s = "ABCDEabcd123456!@#$%^";for(int i = 0;i < s.length();i++) {char a = s.charAt(i); //char charAt(int index):擷取指定索引位置的字元if(a >='A' && a <= 'Z') {x++;}else if(a >='a' && a <= 'z'){y++;}else if(a >='1' && a <='9'){z++;}else{k++;}}System.out.println("大寫字母的個數是:"+ x);System.out.println("小寫字母的個數是:"+ y);System.out.println("數位個數是:"+ z);System.out.println("其他字母的個數是:"+ k);}}
九、String類的轉換功能
1、byte[] geyBytes():把字串轉換為字元數組 編碼:將看的懂的轉換為電腦看的
GBK編碼:一個中文代表兩個位元組。中文的第一個位元組肯定是負數。
2、char[] toCharArray():把字串轉換為字元數組
3、static String valueOf(char[] chs):把字元數群組轉換為字串
4、static String valueOf(int i):把int 類型的資料轉換為字串
注意:String類的valueOf方法可以把任意類型的資料轉換成字串。重載類型。都是靜態方法,類名.方法就可以調用了。該方法的底層實現其實就是String的一個構造方法,將new String方法封裝起來了。
5、String toLowerCase():把字串轉換成小寫
6、String toUpperCase():把字串轉換成大寫
7、String concat(String str):把字串拼接
十、String類的其他功能
1、String的替換功能
String replace(char old,char new)
String replace(String old,String new)
2、String的去除字串兩端空格
String trim();
3、String的按照字典順序比較兩個字串 按照碼錶值比較 ASICC unicode
int compareTo(string str)
int compareToIgnoreCase(string str):忽略大小寫
十一、字串的反轉
思路:
1、通過鍵盤錄入擷取字串
2、將字串轉換成字元數組
3、倒著白哪裡字元數組。並再次拼接成字串
4、列印
public class Test_fanzhuang {public static void main(String[] args) {String s="abc";char[] ch = s.toCharArray();String ss = "";for(int i = ch.length-1; i >= 0; i--) { //倒著遍曆ss = ss + ch[i]; //字元拼接}System.out.println(ss);}}
十二、在大字串中找小字串出現的次數
思路:
1、定義計數器變數
2、判斷小字串中是否有小字串 indexOf()
有,用substring()將大字串進行截取(在第一次小字串的後邊進行截取),重新賦值給大字串,計數器加1,繼續迴圈。
沒有,返回-1
3、列印計數器
import java.util.Scanner;public class Test_daxiaochuan {public static void main(String[] args) {Scanner sc1 = new Scanner(System.in);System.out.println("請輸入大字串:");String s1 = sc1.nextLine();Scanner sc2 = new Scanner(System.in);System.out.println("請輸入小字串:");String s2 = sc2.nextLine();int count = 0;while(s1.indexOf(s2) != -1) { //大字串中出現小字串int index = s1.indexOf(s2);s1 = s1.substring(index+s2.length()); //將大字串進行截取count++;} System.out.println(count);}}