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