Day33:String類及其常用方法詳解

工地佬 發表於 2022-12-06

String類

1.1 String類概述

Java中字串屬於物件,String類用於建立和操作字串。

最簡單的字串建立:直接透過String建立

String str="工地佬";

利用String構造器建立字串

String str=new String("工地佬");

字串的特點:

  • String物件是不可變的。字串(常量)一旦被建立,其內容是不可變的。

  • String建立的字串物件是儲存在字串池中的,是可以共享的。

  • new建立的字串物件是儲存在堆記憶體中的

String str="工地佬";
       str="工具人";
System.out.println(str);
工具人//很明顯,str的地址指向指向了常量池中的"工具人"

我們對上面程式碼進行記憶體分析

Day33:String類及其常用方法詳解

第一行程式碼在常量池中建立的面值為"工地佬"字串且賦值給str,str指向常量池中的"工地佬";

Day33:String類及其常用方法詳解

第二行程式碼 str="工具人";程式並沒有將"工地佬"改成"工具人",而是在常量池中建立了新的字串”工具人“,並將引用賦值給了str,此時原來的字串物件在常量池中便失去了指向,但依然存在。


在Java中,Java虛擬機器為了節約記憶體,將具有相同序列的字串字面值使用同一個物件!

String s1="工地佬";                     //String直接建立
String s2=new String("工地佬");         //new建立
String s3=s1;                          //引用相同
String s4=new String("工地佬");         //new建立

Day33:String類及其常用方法詳解

//== 在引用型別使用時判斷的是引用地址是否相同
System.out.println(s1==s2);//s1是建立在常量池中,s2是建立在堆記憶體中,兩者引用不同,自然也就不會相同
System.out.println(s1==s3);//s1是建立在常量池中,而s1的地址引用賦值給了s3,則兩者引用地址相同
System.out.println(s2==s4);//s2、s4均由new產生,兩者開闢了不同的記憶體空間,則地址不同,所以不相等
false
true
false

1.2 String類的常用方法

  • 返回字串長度

    public int length();非靜態方法,需要例項化才能使用

public class Test{
    public static void main(String[] args){
        String a="java";
        System.out.println(a.length());//length方法為非靜態方法,需要透過物件來呼叫
    }
}
4
  • 獲取指定下標的字元

public char charAt(int index);非靜態方法,需要例項化才能使用

public class Test{
    public static void main(String[] args){
        String a="java";
        System.out.println(a.charAt(0));
    }
}
j
  • 判斷字串中是否含有指定的字串

public boolean contains();非靜態方法,例項化後可用;判斷物件中是否含有字串str,並返回布林值

public class Test{
    public static void main(String[] args){
        String a="java";
        System.out.println(a.caontains("j"));
    }
}
true
  • 將字串轉為陣列

public char[] toCharArray(String str); 將字串以陣列的形式返回

public class Test{
    public static void main(String[] args){
        String a="工地佬";
        System.out.prtintln(a.toCharArray());
        //此時已經是陣列,我們可以呼叫陣列的列印功能,讓控制檯輸出的陣列更加規範
        System.out.println(Arrays.toString(b.toCharArray()));
    }
}
工地佬
[工,地,佬]
  • 搜尋子字串在字串中的首次出現位置的下標值

public int indexOf(String str); 返回子字串在物件中首次出現的下標值;如果物件中不含有待搜尋的字串則會返回-1

public class Test{
    public static void main(String[] args){
        String a="中交第二航務工程局建築工程有限公司";
        System.out.println(a.indexOf("中"));
        System.out.println(a.indexOf("佬"));
        
        //String中關於indexOf還有過載的方法
        //可以定義從物件字串中哪一個下標開始進行索引
        System.out.println(a.indexOf("工",7));//意為從物件字串值中下標為7的字元開始索引"工",並返回索引成功後的下標
    }
}
1
-1
11
  • 搜尋子字串在物件中出現的最後一次的下標值

public int lastIndexOf(String str);返回子字串在物件中最後一次出現的下標值;如果物件中不含有待搜尋的字串則會返回-1

public class Test{
    public static void main(String[] args){
        String a="中交第二航務工程局";
        System.out.println(a.lastIndexOf("中"));
        //同樣,若待查詢的子字串在物件中並不存在的話,將返回-1
        System.out.println(a.lastIndexOf("佬"));
    }
}
1
-1
  • 去除字串前後的空格

public String trim(); 將字串前後的空格去除掉後返回; (原始字串沒有被改變,返回的是一個新的字串)

public class Test{
    public static void main(String[] args){
        String a="   中交   第二航務  工程局   ";
        System.out.println(a.trim());
    }
}
中交   第二航務  工程局
  • 大小寫轉換

public String toUpperCase(); 將字串中的小寫全部轉回大寫,並返回

public String toLowerCase(); 將字串中的大寫全部轉回小寫,並返回

public class Test{
    public static void main(String[] args){
        String a="java IS THE best Language";
        System.out.println(a.toUpperCase());
        System.out.println(a.toLowerCase());
    }
}
JAVA IS THE BEST LANGUAGE
java is the best language
  • 判斷字串是否以子字串為結尾

public boolean endsWith(String str);判斷字串中是否已str為結尾,返回布林值

public boolean startsWith(String str);判斷字串中是否已str為開頭,返回布林值

public class Test{
    public static void main(String[] args){
        String a="java is the best language in the world!"
        System.out.println(a.endsWith("in"));
        System.out.println(a.startsWith("in"));
    }
}
false
false
  • 將字串中的目標字串替換成新的字串

public String replace(char oldChar,char newChar);

public class Test{
    public static void main(String[] args){
        String a="java is the best language in the world!";
        System.out.println(a.replace("in","all over"));
    }
}
java is the best language all over the world!
  • 根據給定條件對字串進行拆分

public String[] split(String str); 將字串按照給定的str為拆分訊號進行拆分,並重新組合成字串陣列返回

public class Test{
    public static void main(String[] args){
        String a="java is the best language in the world!";
        System.out.println(Array.toString(a.split(" ")));
        String b="工 地 佬 ,是 牛 馬";
        //如果字串中含有空格,逗號,該如何拆分字串
        //[ ,] 表示選擇"空格"或者","為分隔符進行拆分
        System.out.println(Array.toString(b.split("[ ,]")));
        
        //如果字串中空格或者逗號的個數有多個,應該怎麼拆分得到有效字串呢
        //[ ,]+   表示選擇一個或者多個"空格"或者","為分隔符進行拆分
        String b="工 地   佬   ,是 牛   馬";
        System.out.println(Array.toString(b.split("[ ,]+")));
    }
}
[java, is, the, best, language, in, the, world]
[java, is, the, best, language, in, the, world]
[java, is, the, best, language, in, the, world]
  • 提取字串中子字串

public String subString(int beginIndex); 返回從指定下標到結尾的子字串

過載方法:public String subString(int beginIdex,int endIndex);返回指定下標區域的子字串並返回

public class Test{
    public static void main(String[] args){
        String a="java is a computer language!"
        String b=a.subString(5);
        System.out.println(b);
        System.out.println(b.subString(5,10))
    }
}
is a computer language!
is a 
  • 比較字串內容是否相等

public boolean equals(Object o); String類中的equals方法是重寫了Object中的equals方法,其功能為比較兩者內容是否一致

public class Test{
    public static void main(String[] args){
        String a="bba";
        String b=new String("bba");
        System.out.println(a.equals(b));//String類中的equals已經重寫,功能為比較兩個物件的內容是否一致,並非地址
    }
}
true

public int compareTo(String str); 比較兩個字串的Unicode碼的差值

public class Test{
    public static void main(String[] args){
        String a="bba";
        String b="background";
        System.out.println(a.compareTo(b));//兩者比較對應字元的Unicode碼差值,出現差值後,結束比較
        
        //特殊情況  兩個字串面值屬於包含關係,那麼比較的則是字串長度
        String c="back";
        System.out.println(b.compareTo(c));//b包含c,兩者比較則是比較字串長度
        
    }
}
1
6