Java與眾不同的字串-String類

木目先生發表於2020-10-21

首先,無論你學習什麼程式語言,是不是感覺都是從”Hello World!“開始寫起的,而Hello World!本身就是一個字串,從定義上來說就是字串就是由一個或者多個字元組成的有序數列,簡單來說就是一串字元,亦或者可以理解為就是一段text。

String物件的建立

字串的建立,分為兩種,一種是通過變數直接建立,另一種例項化物件,由於String本身就是一個物件,可以直接通過例項化物件的形式來建立。

第一種,通過變數的形式直接建立
String 變數名 = 字串;
String DataName = characterString

        //通過變數的形式建立字串
        String DataName = characterString
        String str1 = "Hello World!";
        System.out.print(str1);

第二種,通過例項化物件的形式來建立
String 物件名 = new String();
String objectName = new String();

       //例項化物件
       String objectName = new String();
        String str2 = new String();

獲取字串的長度

獲取字串的長度的方法和獲取陣列長度無異,都是使用length()方法

        //獲取字串長度
        System.out.println(str1.length());
        結果:
        字串長度為:12

字串查詢

按照平常思維,查詢字串,無疑是查詢指定位置的字元,或者是查詢一個字元在什麼位置,簡單來理解就是到什麼位置去找某人,某人在什麼位置。

找到指定位置的字元

跟陣列一樣我們也可以把一串字元看成一個有多個字元組成的陣列,而每個字元都有一個索引值,索引值從零開始。

        //獲取指定位置的字元
        System.out.println("字串下標為5的字元為:"+str1.charAt(6));
結果:
字串下標為5的字元為:W

找到指定字元所在的位置

查詢指定字元所在的位置,使用的是indexOf()方法,它有幾個傳入值,
indexOf(String str,int indexfrom);第一個屬性值是需要查詢的字元,第二個屬性值是開始查詢的索引值
indexOf(int ch , int indexfrom);第一個屬性值是需要查詢的字元,第二個屬性值是開始查詢的索引值
另一點就是,如果查詢的字元不屬於該字串,則放回-1;
相同的還有一個獲取最後一次字元出現的位置,使用的是lastIndexOf()

        //獲取指定字元所在的位置
        //獲取第一次出現的位置
        System.out.println("查詢字元所在位置為:"+str1.indexOf("a"));//查詢一個不存在於字串中的字元
        System.out.println("查詢字元所在位置為:"+str1.indexOf("e"));
        System.out.println("查詢字元所在位置為:"+str1.indexOf('o',5));
        //獲取最後一次出現的位置
        System.out.println("查詢字元所在位置為:"+str1.lastIndexOf("o"));
結果:
查詢字元所在位置為:-1
查詢字元所在位置為:1
查詢字元所在位置為:7
查詢字元所在位置為:7

字串擷取

字串擷取就是在一個字串中擷取從一個字元到另一個字元之間的所有字元,
方法為substring(int beganIndex,int endIndex);這裡是索引值,輸入的屬性值是其字元所對應的索引值即下標,但是不包括endIndex字元。額外瞭解,substring是計算機專業詞彙,字串的意思,子字串。

        //字串擷取
        System.out.println(str1.substring('e','o'));
結果:
o Wor

字串切割

切割的單詞是split,而字串切割使用的剛好就是split()方法,將字串切割為字元子串。
split(String regex,int limit);第一個引數regex就是切割的判斷字元,以什麼為切割的字元標準。第二個引數事實上是一個限制標準,limit,但使用這個引數會改變字串的長度。

另外一個就是將字串切割為byte陣列,在實際工作中,網路上的資料傳輸就是使用二進位制位元組資料。因此字串和位元組陣列之間的相互轉換也很常用。
這裡使用的就是getByes()方法,也很好理解,就是get獲取,bytes位元組,獲取位元組。

        //字串切割
        //切割為字串陣列
        String newstr1 = "Considering the above-mentioned";
        String[] stringArray = newstr1.split(" ",5);//將newstr1字串切割並賦值給字元陣列stringArray
        for (String str3:stringArray)//通過for each迴圈遍歷陣列
        {
            System.out.print(str3+"\t");
        }
        //
        System.out.println("\n將字串轉換為byte陣列:");
        // 將字串轉換為位元組陣列
        byte[] ascii = newstr1.getBytes();
        // 遍歷位元組陣列,列印每個元素
        for (byte aByte : ascii) {
            System.out.print(aByte + "\t");
        }
結果:
Considering	the	above-mentioned	
將字串轉換為byte陣列:
67	111	110	115	105	100	101	114	105	110	103	32	116	104	101	32	97	98	111	118	101	45	109	101	110	116	105	111	110	101	100	

字串大小寫切換

字串大小寫切換,很容易想到,兩種切換,大寫轉換為小寫,小寫轉換為大寫。
字串轉換為小寫:toLowerCase()方法。
字串轉換為大寫:toUpperCase()方法。

        //字串大小寫轉換
        String firstString = "As we have ofen said:It is never too old to learn";
        String s = firstString.toLowerCase();
        System.out.println("\n轉換為小寫後:"+s);
        String secoundString = "A girl who loves to lough won't have too much lack";
        String s1 = secoundString.toUpperCase();
        System.out.println("轉換為大寫後:"+s1);
結果:
轉換為小寫後:as we have ofen said:it is never too old to learn
轉換為大寫後:A GIRL WHO LOVES TO LOUGH WON'T HAVE TOO MUCH LACK

字串比較

字串比較不要使用==,在String有專用的方法,boolean equals(Object object)方法,來比較字串內容是否相同,返回一個布林型別的結果。另外,在比較字串內容是否相同時,必須使用 equals() 方法。

        // 用兩種方法建立三個內容相同的字串
        String str12 = "hello";
        String str22 = "hello";
        String str33 = new String("hello");
        System.out.println("使用equals()方法比較str12和str22的結果為:" + str12.equals(str22));
        System.out.println("使用==運算子比較str12和str22的結果為:" + (str12 == str22));
        System.out.println("使用==運算子比較str12和str22的結果為:" + (str12 == str22));
        System.out.println("使用==運算子比較str12和str33的結果為:" + (str12 == str33));
結果:
使用equals()方法比較str12和str22的結果為:true
使用==運算子比較str12和str22的結果為:true
使用==運算子比較str12和str22的結果為:true
使用==運算子比較str12和str33的結果為:false

相關文章