Java中的常用類:String類

Java中定義了String 和 StringBuffer 兩個類來封裝字符串,並提供了一系列操作字符串的方法。由於它們都位於 java.lang 包中,所以不需要導包就可以直接使用。

字符串的特點:

  • 字符串是常量,字符串的內容是不可改變的
  • 正是因爲字符串不可改變,所以字符串是可以共享使用的
  • 字符串效果上相當於是 char[] 字符數組,但是底層原理是 byte[] 字節數組

字符串常量池:程序當中直接寫上的雙引號字符串,就在字符串常量池中

String 類的初始化

  • 使用字符串常量直接初始化一個 String 對象
String 變量名 = "字符串";

String str1 = null; //初始化爲空
String str2 = "";  //初始化爲空字符串
String str3 = "abc";  //初始化爲 abc

在初始化字符串對象時,既可以將字符串對象的初始化值設爲空,也可以是一個具體的字符串。
  • 使用 String 的構造方法初始化字符串對象
String 變量名 = new String("字符串");

String類中包含多個構造方法:
    String()  //創建一個內容爲空的字符串
    String(String value)  //根據指定的字符串內容 創建對象
    String(char[] value)  //根據指定的字符數組 創建對象
package com.wang.string.demo1;

public class StringDemo1 {
    public static void main(String[] args) {
        //創建一個空的字符串
        String s1 = new String();

        //創建一個內容爲 abc 的字符串
        String s2 = new String("abc");

        //創建一個內容爲字符數組的字符串
        char[] chars = {'A', 'B', 'C'};
        String s3 = new String(chars);

        System.out.println("a" + s1 + "b"); //s1爲 " " 空,使用連接符+連接
        System.out.println(s2); //abc
        System.out.println(s3); //ABC
    }
}

String 類的常見操作

注意:String類中有許多方法

int indexOf(int ch)  獲取指定字符在此字符串中第一次出現處的索引
int lastIndexOf(int ch)  獲取指定字符在此字符串中最後一次出現處的索引
int indexOf(String str)  獲取指定字符串在此字符串中第一次出現處的索引
int lastIndexOf(String str)  獲取指定字符串在此字符串中最後一次出現處的索引
    
-------------------------------------------------------------------------
    
int length()  獲取此字符串的長度
char charAt(int index)  獲取字符串中index位置上的字符,其中index的取值範圍是:0~(字符串長度-1)
boolean endsWith(String suffix)  判斷此字符串是否以指定的字符串結尾
boolean equals(Object anObject)  將此字符串與指定的字符串比較,區分大小寫
boolean equalsIgnoreCase(String anotherString)  將此字符串與指定的字符串比較,忽略大小寫
    
-------------------------------------------------------------------------
    
boolean isEmpty()  當且僅當字符串的長度爲0時返回 true
boolean startsWith(String prefix)  判斷字符串是否以指定的字符串開始
String toLowerCase()  將String中的所有字符都轉換爲小寫
String toUpperCase()  將String中的所有字符都轉換爲大寫
    
-------------------------------------------------------------------------
    
char[] toCharArray()  將此字符串轉換爲一個字符數組
String trim()  返回一個新字符串,它去除了原字符串首尾的空格
static String valueOf(int i)int參數轉換爲String類型字符串
String replace(CharSequence oldstr, CharSequence newstr)  
返回一個新的字符串,它是通過用newstr替換此字符串中出現的所有oldstr得到的
    
-------------------------------------------------------------------------
    
boolean contains(CharSequence cs)  判斷此字符串中是否包含指定的字符序列
String substring(int beginIndex)  
截取一個新的字符串,它包含從指定的beginIndex起始角標處開始,直到此字符串末尾的所有字符
    
String substring(int beginIndex, int endIndex)
截取一個新的字符串,它包含從指定的beginIndex起始角標處開始,直到索引endIndex-1角標處的所有字符
備註:左閉右開,包含左邊,不包含右邊
    
String[] split(String regex)
根據參數regex,將字符串分割爲若干個子字符串,注意:regex是一個正則表達式,用於限定分割規則
如果按照英文的句點"."進行分割,必須寫成"\\."(前面加上兩個反斜槓)
    
byte[] getByte()  獲得當前字符串底層的字節數組
  • 字符串的基本操作

對字符串的基本操作,如獲得字符串的長度,獲得指定位置的字符等。

package com.wang.string.demo1;

public class StringDemo2 {
    public static void main(String[] args) {
        //初始化字符串
        String s = "abcabcbacdba";

        System.out.println("字符串的長度爲:" + s.length()); //12
        System.out.println("字符串中第一個字符爲:" + s.charAt(0));  //a
        System.out.println("字符 c 第一次出現的位置:" + s.indexOf('c'));  //2
        System.out.println("字符 c 最後一次出現的位置:" + s.lastIndexOf('c'));  //8
        System.out.println("'ab'字符串第一次出現的位置:" + s.indexOf("ab"));  //0
        System.out.println("'ab'字符串最後一次出現的位置:" + s.lastIndexOf("ab"));  //3
    }
}
  • 字符串的轉換操作

程序開發中,有時需要對字符串進行轉換操作,例如將字符串轉換成字符數組,將字符串中的字符進大小寫轉換等。其中 valueOf() 方法有很多重載的形式,float,double,char等其他基本類型的數據都可以通過該方法轉換爲 String 字符串類型。

package com.wang.string.demo1;

public class StringDemo3 {
    public static void main(String[] args) {
        String s = "java";
        char[] charArray = s.toCharArray();
        System.out.print("將字符串轉換爲字符數組的遍歷結果:");
        for (int i = 0; i < charArray.length; i++) {
            //如果不是數組的最後一個元素,在元素後面加逗號
            if (i != charArray.length - 1) {
                System.out.print(charArray[i] + ",");
            }else {
                //數組的最後一個元素後面不加逗號
                System.out.println(charArray[i]);
            }
        }

        System.out.println("將int值轉換爲String類型之後的結果:" + String.valueOf(12));

        System.out.println("將字符串轉換成大寫之後的結果:" + s.toUpperCase());
    }
}
--------------------------------------------------------------------------------------
    結果:
   		 將字符串轉換爲字符數組的遍歷結果:j,a,v,a
		 將int值轉換爲String類型之後的結果:12
		 將字符串轉換成大寫之後的結果:JAVA
  • 字符串的替換和去除空格操作

在程序開發過程中,需要考慮到用戶輸入數據時會有一些錯誤和空格的情況,這時可以使用 String 類的 replace()trim() 方法,進行字符串的替換和去除空格操作。

package com.wang.string.demo1;

public class StringDemo4 {
    public static void main(String[] args) {
        String s = "      http :// localhost : 8080";

        //字符串去除空格操作
        System.out.println("去除字符串兩端空格後的結果:" + s.trim());

        //字符串替換操作
        System.out.println("去除字符串中所有空格後的結果:" + s.replace(" ", ""));
    }
}
------------------------------------------------------------------------------------
    結果:
    	去除字符串兩端空格後的結果:http :// localhost : 8080
		去除字符串中所有空格後的結果:http://localhost:8080
	注意:
        trim()方法只能去除兩端的空格,不能去除中間的空格。若想去除字符串中間的空格,
        則可以通過 String類的 replace()方法來實現。
  • 字符串的判斷操作

操作字符串時,有時候需要對一些字符串進行一些判斷,如判斷字符串是否以指定的字符串開始,結束,是否包含指定字符串,字符串是否爲空等。

package com.wang.string.demo1;

public class StringDemo5 {
    public static void main(String[] args) {
        String s1 = " Starter";  //聲明一個字符串
        String s2 = "St";

        System.out.println("判斷是否以字符串St開頭:" + s1.startsWith("St"));
        System.out.println("判斷是否以字符串er結尾:" + s1.endsWith("er"));
        System.out.println("判斷是否包含字符串ar:" + s1.contains("ar"));
        System.out.println("判斷字符串是否爲空:" + s1.isEmpty());
        System.out.println("判斷兩個字符串是否相等:" + s1.equals(s2));
    }
}
-----------------------------------------------------------------------------------
    結果:
    	判斷是否以字符串St開頭:false
		判斷是否以字符串er結尾:true
		判斷是否包含字符串ar:true
		判斷字符串是否爲空:false
		判斷兩個字符串是否相等:false

在程序中可以通過 ==equals() 兩種方式對字符串進行比較,equals() 方法用於比較兩個字符串中的字符值(即內容)是否相等。== 方法用於比較兩個字符串對象的內存地址是否相等。對於兩個字符串對象,當他們的字符值完全相同時,使用 equals 判斷結果會是 true,但是使用 == 判斷時,結果爲 false。

使用 equals 方法的注意事項:

  1. equals方法具有對稱性,也就是 a.equals(b) 和 b.equals(a) 效果一樣

  2. 如果比較雙方一個是常量,一個是變量,推薦把常量字符串放在前面

    推薦:“abc”.equals(str) ,防止出現空指針異常

String str1 = new String("abc");
String str2 = new String("abc");

//結果爲false,因爲 str1和str2 是兩個對象
System.out.println(str1 == str2);

//結果爲true,因爲 str1和str2 字符內容相同
System.out.println(str1.equals(str2));
  • 字符串的截取和分割

在String類中針對字符串的截取和分割操作提供了兩個方法,其中,substring() 方法用於截取字符串的一部分,split() 方法可以將字符串按照某個字符進行分割。

package com.wang.string.demo1;

public class StringDemo6 {
    public static void main(String[] args) {
        String str = "2020-02-02";

        //字符串截取操作
        System.out.println("從第6個字符截取到末尾的結果:" + str.substring(5));
        System.out.println("從第6個字符截取到第7個字符的結果:" + str.substring(5, 7));

        //字符串分割操作
        System.out.print("分割後的字符串數組中的元素依次爲:");
        //通過橫線連接符 "-" 將字符串轉換爲字符數組
        String[] strArray = str.split("-");
        //循環輸出數組中的元素
        for (int i = 0; i < strArray.length; i++) {
            if (i != strArray.length - 1) {
                //如果不是數組的最後一個元素,在元素後面加逗號
                System.out.print(strArray[i] + ",");
            }else {
                //數組的最後一個元素後面不加逗號
                System.out.println(strArray[i]);
            }
        }
    }
}
----------------------------------------------------------------------------------
    結果:
    	從第6個字符截取到末尾的結果:02-02
        從第6個字符截取到第7個字符的結果:02
        分割後的字符串數組中的元素依次爲:20200202
    注意:
    	因爲字符串的字符索引是從0開始的,所以截取字符串中第6個字符,它的字符索引就是5;
		split()方法會根據指定的符號 - 將字符串分割成三部分,並存放在一個String類型的
        數組中,使用for循環遍歷數組即可。

注意:

String 字符串在獲取某個字符時,會用到字符的索引,當訪問字符串中的字符時,如果字符的索引不存在,則會發生 StringIndexOutOfBoundsException(字符串角標越界異常),訪問字符串中的字符時,不能超出字符的索引範圍,否則會出現異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章