public final class String extends Object 1、用final修飾的最終類,是代表字元串的類; 2、字元串在底層是以字元數組的形式存儲; 3、任何的字元串都是String的對象 4、字元串常量可以共用(下圖) String s1 = “ab”; String s2 ...
public final class String extends Object
1、用final修飾的最終類,是代表字元串的類;
2、字元串在底層是以字元數組的形式存儲;
3、任何的字元串都是String的對象
4、字元串常量可以共用(下圖)
String s1 = “ab”;
String s2 = new String(“ab”);
s1和s2指向的是同一塊記憶體空間,區別在於s1先指向運行時常量池,運行時常量池再指向堆記憶體,而s2是先在堆記憶體中開闢一塊空間,用來存儲運行時常量池中value的地址,然後根據value所在空間的地址去堆記憶體中找對應的字元數組,若沒有,則在常量池中新開闢一塊空間,併在堆記憶體中創建對應的字元數組,若有,直接調用即可。
String s3 = “a”+“b”;
字元串在使用+拼接的時候底層實際上是調用了StringBuilder中的append的方法
String s4 = “a”; 產生1個對象
s4 = s4+”b” 產生4個對象(new StringBuilder,”b”,”ab”,toString方法會返回一個new String對象)
字元串拼接方式:
1、+
2、直接使用StringBuilder的append方法
3、concat()
StringBuilder和StringBuffer的方法簽名一模一樣,用法一致,區別在於前者是線程不安全的,後者是線程安全的
表示沒有輸入任何字元: str.equals(””)
常用方法:
創建字元串對象:String str = “”;
調用方法:
str.length() 獲取字元串長度
str.charAt() 獲取指定下標位置字元
str.toCharArray() 將字元串轉化為字元數組
字元數組轉化為字元串
char[] c = {‘ ’,’ ’,’ ’,};
String str = new String(c);或者String str = new String(c,起始位置,個數); 指定要轉換的字元個數
str1.compareTo(str2) 按字典順序比較兩個字元串(相減不為零才返回該差的值,否則會一致遍歷,若長度不等,較短與較長對應值都相等,則返回長度之差)
str1.compareToIgnoreCase(str2) 忽略字母大小寫進行比較
str.toUpperCase() 轉化為大寫
str.toLowerCase() 轉化為小寫
註意:字元串提供了一系列的操作而不改變原字元串的方法,操作的結果是產生一個新的字元串,原字元串並沒有發生任何改變
str1.equals(str2) 判斷字元串是否相等
str1.equalsIgnoreCase(str2) 忽略大小寫
instanceof 判斷對象和類的關係
對象 instanceof 類/介面 表示判斷對象是否是指定類/介面及其父類/父介面的對象
如果對象的實際類型繼承或者實現類/介面,則該對象也是繼承或者實現的類/介面的對象
str1.concat(str2) 將新字元串拼接在原字數串尾端(底層實際是數組的複製合併過程)
str.contains(“”) 判斷是否包含,只能判斷具體子串
str.endsWith(“”) 尾碼(判斷是否以””中的字元結束)
str.startsWith(“”) 首碼
str.getBytes(“utf-8”) 字元串轉位元組(括弧中可以指定編碼,預設是GBK)
str.hashcode() 字元串的哈希碼唯一
str.indexOf(‘’) 獲取字元/字元串在給定的字元串中第一次出現時的下標,也可以指定從某個下標開始找str.indexOf(“”,count),表示從下標為count的位置開始往後找,若沒有該字元/字元串,則返回-1
str.lastIndexOf() 獲取字元/字元串在給定的字元串中最後一次出現時的下標,也可以指定從某個下標開始找str.lastIndexOf(“”,count),表示從下標為count的位置開始往前找,若沒有該字元/字元串,則返回-1
str.intern() 強制返回指向給定的字元串的常量池地址
str.isEmpty() 判斷字元串的長度是否為0,註意區別於null,長度:0 != null
str.replace(‘’,’’) 用指定字元替換原字元
str.substring(起始,結束) 截取指定字元串,一般表示範圍的時候,習慣上包頭不包尾/含小不含大
str.trim() 去掉字元串前後的空白
String str = String.valueOf() 將其它類型(包括基本類型和引用類型)的數據轉化為字元串
註意:列印一個對象(引用類型)時,底層先調用String.valueOf()方法,當對一個對象進行valueOf操作的時候,底層實際上是調用了Object對象的tostring方法,因此輸出結果是該對象的地址
特殊的:列印字元數組時,底層也是先調用valueOf()方法,但該方法返回值是new String(),因此輸出的結果是對應字元數組的字元串
獲取字元串中的字元
將字元串用split方法按指定的正則規則切分成字元串數組,遍歷該字元串數組,得到單個字元
String s1 = "a,1,2,b,4,d"; String[] s2 = s1.split(","); for(String c:s2){ System.out.println(c); }
字元串和其它類型數據的互相轉化
·基本數據類型—>字元串
1、String s = String.valueOf(八種基本類型)
2、String s = “”+八種基本類型數據
3、StringBuilder s = new StringBuilder().append(八種基本類型數據);
·字元串—>基本數據類型
int i = Integer.parseInt(); //這種方法除了字元不適用外,其它七種基本類型都適用,只需要將數據類型換為對應的即可
char c = s.charAt(0); //字元串轉字元(字元串只能有一個字元),其中s是String對象
·數型數組—>字元串(數型數組包括整數和小數)
int[] in = {1,2,3,4,5}; String st = ""; for (int i = 0; i < in.length; i++) { String s = String.valueOf(in[i]); st += new String(new StringBuilder().append(s)); } System.out.println(st);
·字元串—>數型數組
String s = "123456"; char[] cs = s.toCharArray(); for (char c : cs) { int i = c-'0'; System.out.println(i); }
·字元數組—>字元串
char[] cs = {'a','b','c','d','e'};
String s = "";
s+=new String(new StringBuilder().append(cs));
System.out.print(s);
·字元串—>字元數組
String s = "abcde";
char[] cs = s.toCharArray();
for(char c:cs)
System.out.println(c);