1. 程式人生 > >String(字串)類

String(字串)類

String(字串)類

  字串是由多個字元組成的,而且它還是個常量,一旦被建立,值就不能被改變,它和字元的區別在於,字元是單引號(如:'a'),而字串是雙引號(如:"asdf",它本身也是個物件,可以直接呼叫方法)。

String(字串)類的常用方法

構造方法
構造方法 說明
public String() 空構造
public String(byte[] bytes) 把位元組陣列轉成字串
public String(byte[] bytes,int index,int length) 把位元組陣列的一部分轉成字串(index:表示的是從第幾個索引開始, length表示的是長度)
public String(char[] value) 把字元陣列轉成字串
public String(char[] value,int index,int count) 把字元陣列的一部分轉成字串
public String(String original) 把字串常量值轉成字串
程式碼演示
public class Sstring {
    public static void main(String[] args) {
   		 //定義字元陣列
        char[] c={'愛','生','活',',','愛','j','a','v','a'};
        //初始化,呼叫建構函式public String(char[] value);
        String s = new String(c);
        //初始化,呼叫建構函式public String(char[] value,int index,int count);
        String s1 = new String(c,0,3);
        System.out.println(s);
        System.out.println(s1);
    }
}

結果

愛生活,愛java
愛生活
判斷功能
判斷方法 說明
public boolean equals(Object obj) 比較字串的內容是否相同,區分大小寫
public boolean equalsIgnoreCase(String str) 比較字串的內容是否相同,忽略大小寫
public boolean contains(String str) 是否包含某字串,有就true,反之false
public boolean startsWith(String str) 是否以該字串開頭,是就true,反之false
public boolean endsWith(String str) 是否以該字串結尾,是就true,反之false
public boolean isEmpty() 內容是否為空串,是就true,反之false
程式碼演示
public class Sstring {
    public static void main(String[] args) {
    
        //字串本身就是物件,直接就可以呼叫方法
        //判斷是否以包含該字串
        boolean b = "愛生活,愛java".contains("愛");
        System.out.println(b);
        
        //判斷是否以該字串開頭
        boolean c = "愛生活,愛java".startsWith("愛");
        System.out.println(c);
        
        //判斷是否以該字串結尾
        boolean e = "愛生活,愛java".endsWith("愛");
        System.out.println(e);
        
        //判斷是否為空串""
        boolean empty = "愛生活,愛java".isEmpty();
        System.out.println(empty);
        
        String a="abc";
        String aa="ABC";
        
        //比較兩個物件內容是否相同,不忽略大小寫
        System.out.println(a.equals(aa));
        
        //忽略大小寫
        System.out.println(a.equalsIgnoreCase(aa));

    }
}

結果

true
true
false
false
false
true
獲取功能
獲取功能 說明
public int length() 獲取字串長度
public char charAt(int index) 獲取指定位置的字串
public int indexOf(String str) 返回指定字串在此字串中第一次出現處的索引
public int indexOf(String str,int fromIndex) 返回指定字串在此字串中從指定位置後第一次出現處的索引
public String substring(int start) 從指定位置開始擷取字串,預設到末尾
public String substring(int start,int end) 從指定位置開始到指定位置結束擷取字串,含頭不含尾
程式碼演示
public class Sstring {
    public static void main(String[] args) {
    
        //從該位置到末尾擷取字串
        System.out.println("愛生活,愛java".substring(0));
        
        //從第一個位置開始到第二個位置結束擷取字串,含頭不含尾,因此擷取的結果為生活
        System.out.println("愛生活,愛java".substring(1,3));
        
        //指定擷取的位置,並返回字元
        System.out.println("愛生活,愛java".charAt(1));
        
        //返回字串長度
        System.out.println("愛生活,愛java".length());
        
        //返回字串第一次出現的位置
        System.out.println("愛生活,愛java".indexOf("愛"));
        
        //返回從指定位置開始搜尋,該字串第一次出現的位置
        System.out.println("愛生活,愛java".indexOf("愛",2));
        
    }
}

結果

愛生活,愛java
生活
生
9
0
4
轉換功能
轉換功能 說明
public byte[] getBytes() 把字串轉換為位元組陣列
public char[] toCharArray() 把字串轉換為字元陣列
public static String valueOf(char[] chs) 把字元陣列轉成字串
public static String valueOf(int i) 把int型別的資料轉成字串

注意:String類的valueOf方法可以把任意型別的資料轉成字串

public String toLowerCase() 把字串轉成小寫
public String toUpperCase() 把字串轉成小寫
public String concat(String str) 把字串拼接起來
其他功能
其他功能 說明
public String replace(char old,char new) 將指定字元進行互換
public String replace(String old,String new) 將指定字串進行互換
public String trim() 去除兩端空格
public int compareTo(String str) 會對照ASCII 碼錶,從第一個字母進行減法運算,返回的就是這個減法的結果,如果前面幾個字母一樣會根據兩個字串的長度進行減法運算返回的就是這個減法的結果如果連個字串一摸一樣,返回的就是0
public int compareToIgnoreCase(String str) 跟上面的compareTo方法一樣,只不過忽略大小寫
程式碼演示
把陣列中的資料按照指定個格式拼接成一個字串

如: int[] arr = {1,2,3}; 輸出: [1, 2, 3]

public class Sstring {
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        String c = "]";//定義一個字串存放"[" 
        String d="[";//定義一個字串存放"]"
        
        //遍歷陣列,把陣列中的數字轉換為字串
        for (int i = 0; i <arr.length ; i++){
        
        //把轉換的字串與前括號拼接在一起,用concat方法把字串拼接起來
            d=d.concat(String.valueOf(arr[i]));
            if(i==arr.length-1){
            //把後括號和前面的字串拼接起來
               d=d.concat(c);
                
        //跳出迴圈,這樣最後的逗號就可以不用多打出來,否則括號外會多一個逗號                
                break;
            }
            d=d.concat(",");//拼接逗號
        }
        System.out.println(d);
    }
}

結果

[1, 2, 3]

面試題

1、String s = new String(“hello”)和String s = “hello”;的區別

在這裡插入圖片描述

  String型別的變數本身就是一個引用型別,字串的值是在方法區的常量池中儲存的,通過上圖可以瞭解到,jvm虛擬機器把java檔案編譯為位元組碼(class)檔案後,載入進棧main方法;第一個s是new出來的物件,因此會在堆中開闢一個空間,這個空間裡儲存的就是這個hello的地址,然後s就會指向這個空間從而間接的從這個空間中的地址指向hello,從而取到hello值;第二個s是直接將hello的地址賦給它,從而指向hello,取到hello值。
2、s的結果是多少?

String s = "hello" ; 
s =  "world" + "java";

在這裡插入圖片描述
  結果是worldjava,因為String型別一經賦值就不會再改變了,改變的是它的引用,一開始給s賦予的是hello的地址,因此它開始時指向的是hello的地址,又因為world和java這兩個字串在常量池中還沒有它們,因此在常量池中相繼建立它們,我們最後取得是這兩個值連線在一起,因此又會在常量池中建立這個值,然後賦予s它的地址。