StringStringBuilder的使用
String
- String 類在 java.lang 包下,所以使用的時候不需要導(dǎo)包
- String這個類比較特殊, 打印其對象名的時候, 不會出現(xiàn)內(nèi)存地址,而是該對象所記錄的真實內(nèi)容.
面向?qū)ο?繼承, Object類
特點: - Java 程序中所有的雙引號字符串,都是 String 類的對象
- 字符串不可變,它們的值在創(chuàng)建后不能被更改,平常用的不是更改是替換
- String的值不可變,但可被共享
常用String構(gòu)造方法:
- public String() : 創(chuàng)建一個空白字符串對象,不含有任何內(nèi)容
- public String(char[] chs) : 根據(jù)字符數(shù)組的內(nèi)容,來創(chuàng)建字符串對象
- public String(String original) : 根據(jù)傳入的字符串內(nèi)容,來創(chuàng)建字符串對象
- String s = “abc”; 直接賦值的方式創(chuàng)建字符串對象,內(nèi)容就是abc
常用方法:
public int length():返回此字符串的長度
代碼演示:
public static void main(String[] args) {// public String() : 創(chuàng)建一個空白字符串對象,不含有任何內(nèi)容String s1 = new String();System.out.println(s1);// public String(char[] chs) : 根據(jù)字符數(shù)組的內(nèi)容,來創(chuàng)建字符串對象char[] chs = {'i','t','z','h','u','z','h','u'};String s2 = new String(chs);System.out.println(s2);// public String(String original) : 根據(jù)傳入的字符串內(nèi)容,來創(chuàng)建字符串對象String s3 = new String("1998");System.out.println(s3);}面試題:
當(dāng)字符串之間使用+號拼接的時候,系統(tǒng)底層會自動創(chuàng)建一個StringBuilder對象,然后調(diào)用其append方法完成拼接,拼接后再調(diào)用其toString方法轉(zhuǎn)換為String類型,然后和常量池的s1對比就發(fā)現(xiàn)了不一樣,所以答案是false
public static void main(String[] args) {String s1 = "abc";String s2 = "ab";String s3 = s2 + "c";System.out.println(s1 == s3);}Java存在常量優(yōu)化機制,所以在編譯的時候(javac)就會將"a" + “b” + “c"拼接為"abc”,所以答案是ture
String s1 = "abc";String s2 = "a" + "b" + "c";System.out.println(s1 == s2);創(chuàng)建字符串對象的區(qū)別對比:
-
通過構(gòu)造方法創(chuàng)建
? 通過 new 創(chuàng)建的字符串對象,每一次 new 都會申請一個內(nèi)存空間,雖然內(nèi)容相同,但是地址值不同 -
直接賦值方式創(chuàng)建
? 以“”方式給出的字符串,只要字符序列相同(順序和大小寫),無論在程序代碼中出現(xiàn)幾次,JVM 都只會建立一個 String對象,并在常量池中維護
equals:
-
public boolean equals(String s) 比較兩個字符串內(nèi)容是否相同、區(qū)分大小寫
-
== 比較基本數(shù)據(jù)類型:比較的是具體的值
-
== 比較引用數(shù)據(jù)類型:比較的是對象地址值
-
equals:比較字符串內(nèi)容, 區(qū)分大小寫
-
equalsIgnoreCase : 比較字符串內(nèi)容, 忽略大小寫
代碼演示:
public class DemoEquals {public static void main(String[] args) {String s1 = "abc";String s2 = "ABC";String s3 = "abc";// equals : 比較字符串內(nèi)容, 區(qū)分大小寫System.out.println(s1.equals(s2));System.out.println(s1.equals(s3));// equalsIgnoreCase : 比較字符串內(nèi)容, 忽略大小寫System.out.println(s1.equalsIgnoreCase(s2));} }遍歷字符串:
public int length():返回此字符串的長度
public char charAt(int index):返回指定索引處的char值,字符串的索引也是從0開始的
public char[] toCharArray( ):將當(dāng)前字符串拆分為字符數(shù)組并返回
用戶登錄案例:
public class Test1 {/*需求:已知用戶名和密碼,請用程序?qū)崿F(xiàn)模擬用戶登錄。總共給三次機會,登錄之后,給出相應(yīng)的提示*/public static void main(String[] args) {// 1. 已知用戶名和密碼,定義兩個字符串表示即可String username = "admin";String password = "123456";// 2. 鍵盤錄入要登錄的用戶名和密碼,用 Scanner 實現(xiàn)Scanner sc = new Scanner(System.in);// 4. 用循環(huán)實現(xiàn)多次機會,這里的次數(shù)明確,采用for循環(huán)實現(xiàn)for(int i = 1; i <= 3; i++){System.out.println("請輸入用戶名:");String scUsername = sc.nextLine();System.out.println("請輸入密碼:");String scPassword = sc.nextLine();// 3. 拿鍵盤錄入的用戶名、密碼和已知的用戶名、密碼進行比較,給出相應(yīng)的提示。if(username.equals(scUsername) && password.equals(scPassword)){System.out.println("登錄成功");break;}else if (i == 3) {System.out.println("您的登錄次數(shù)已達到今日上限, 請明天再來");} else {System.out.println("登錄失敗,您還剩余" + (3 - i) + "次機會");}}} }統(tǒng)計字符次數(shù)案例:
public static void main(String[] args) {// 1. 鍵盤錄入一個字符串,用 Scanner 實現(xiàn)Scanner sc = new Scanner(System.in);System.out.println("請輸入:");String s = sc.nextLine();// 2. 要統(tǒng)計三種類型的字符個數(shù),需定義三個統(tǒng)計變量,初始值都為0int bigCount = 0;int smallCount = 0;int numCount = 0;// 3. 遍歷字符串,得到每一個字符char[] chars = s.toCharArray();for (int i = 0; i < chars.length; i++) {char c = chars[i];// 4. 判斷該字符屬于哪種類型,然后對應(yīng)類型的統(tǒng)計變量+1if(c >= 'A' && c <= 'Z'){bigCount++;}else if(c >= 'a' && c <= 'z'){smallCount++;}else if(c >= '0' && c <= '9'){numCount++;}}// 5. 輸出三種類型的字符個數(shù)System.out.println("大寫字母字符:" + bigCount);System.out.println("小寫字母字符:" + smallCount);System.out.println("數(shù)字字母字符:" + numCount);}手機號屏蔽-字符串截取:
public String substring(int beginIndex, int endIndex):從beginIndex開始截取到endIndex結(jié)束,得到新字符串并返回(包含頭,不包含尾,所以要加一個索引才能正常邏輯截取)
public String substring(int beginIndex): 從傳入的索引處截取,截取到末尾,得到新的字符串
public static void main(String[] args) {// 1. 鍵盤錄入一個字符串,用 Scanner 實現(xiàn)Scanner sc = new Scanner(System.in);System.out.println("請輸入手機號:");String telString = sc.nextLine();// 2. 截取字符串前三位String start = telString.substring(0,3);// 3. 截取字符串后四位String end = telString.substring(7);// 4. 將截取后的兩個字符串,中間加上****進行拼接,輸出結(jié)果System.out.println(start + "****" + end);}敏感詞替換-字符串替換:
String replace(CharSequence target, CharSequence replacement)
將當(dāng)前字符串中的target內(nèi)容,使用replacement進行替換,返回新的字符串
切割字符串:
String[] split(String regex) :根據(jù)傳入的字符串作為規(guī)則進行切割將切割后的內(nèi)容存入字符串?dāng)?shù)組中,并將字符串?dāng)?shù)組返回
public static void main(String[] args) {// 例如:itzhuzhu,23 通過逗號切割出來有效數(shù)據(jù)Scanner sc = new Scanner(System.in);System.out.println("請輸入學(xué)生信息:");String stuInfo = sc.nextLine();// 1. 根據(jù)空格切割字符串String[] sArr = stuInfo.split(" ");// 2. 從得到的字符串?dāng)?shù)組中取出元素內(nèi)容,通過Student類的有參構(gòu)造方法封裝為對象Student stu = new Student(sArr[0],sArr[1]);// 3. 調(diào)用對象getXxx方法,取出數(shù)據(jù)并打印。System.out.println(stu.getName() + "..." + stu.getAge());}判斷前綴與后綴:
startsWith:方法用于檢測字符串是否以指定的前綴開始。
endsWith:方法用于判斷字符串是否以指定后綴結(jié)尾
StringBuilder:
StringBuilder 是一個可變的字符串類,可以把它看成是一個容器,這里的可變指的是 StringBuilder 對象中的內(nèi)容是可變的
StringBuilder類和String類的區(qū)別:
- String類:內(nèi)容是不可變的,執(zhí)行速度慢
- StringBuilder類:內(nèi)容是可變的,執(zhí)行速度飛快
StringBuilder類的常用構(gòu)造方法:
| public StringBuilder() | 創(chuàng)建一個空白可變字符串對象,不含有任何內(nèi)容 |
| public StringBuilder(String str) | 根據(jù)字符串的內(nèi)容,來創(chuàng)建可變字符串對象 |
StringBuilder類的常用成員方法:
| public StringBuilder append(任意類型) | 添加數(shù)據(jù),并返回對象本身 |
| public StringBuilder reverse() | 返回相反的字符序列 |
| public int Length | 返回長度(字符出現(xiàn)的個數(shù)) |
| public String toString() | 通過 toString() 就可以實現(xiàn)把 StringBuilder 轉(zhuǎn)換為 String |
StringBuilder原理:
String添加字符串會先在常量池找有沒有這個字符,沒有的話就會在001開辟空間存這個字符串,如果有拼接的話會直接轉(zhuǎn)成StringBuilder,然后再用toString轉(zhuǎn)回String,所以使用String速度會比較慢一點
StringBuilder添加字符會直接開辟一個StringBuilder地址,然后會在一個StringBuilder中進行拼接字符,就算進行一萬次的拼接也就一個內(nèi)存地址,而用String會有多個,所以StringBuilder速度會比較快
StringBuilder和String相互轉(zhuǎn)換:
- StringBuilder轉(zhuǎn)換為String
public String toString():通過 toString() 就可以實現(xiàn)把 StringBuilder 轉(zhuǎn)換為String
- String轉(zhuǎn)換為StringBuilder
public StringBuilder(String s):通過構(gòu)造方法就可以實現(xiàn)把 String 轉(zhuǎn)換為 StringBuilder
public static void main(String[] args) {int[] arr = {1, 2, 3};String s = arrayToString(arr);System.out.println("s:" + s);}//定義一個方法,用于把 int 數(shù)組中的數(shù)據(jù)按照指定格式拼接成一個字符串返回public static String arrayToString(int[] arr) {//在方法中用 StringBuilder 按照要求進行拼接,并把結(jié)果轉(zhuǎn)成 String 返回StringBuilder sb = new StringBuilder("[");for (int i = 0; i < arr.length; i++) {// 是最后一個就拼接括號,不是最后一個就拼接逗號if (i == arr.length - 1) {sb.append(arr[i]).append("]");} else {sb.append(arr[i]).append(",");}}return sb.toString();}總結(jié)
以上是生活随笔為你收集整理的StringStringBuilder的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ege限制鼠标移动的函数_浅谈函数节流和
- 下一篇: 最详细MySQL的安装与介绍Window