黑馬程序員_String類

------ android培訓、java培訓、期待與您交流! ----------


一、String類(字符串類)概述:

    1、是編程中常用的數據類型,它不是簡單的基本數據類型,而是複合數據類型。
    2、它最大的特點是創建之後不能再修改和變動的字符串常量。
    3、不用import導入就可以使用,並且這個類不需要擴展,定義爲final類(最終類)不能被其他類繼承。
    4、String類實際是使用字符數組存儲的(實際上源代碼就是使用char類型的 )


二、String類的兩種創建方式:

String s1 = new String("java01");
String s2 = "java01";

上面是創建String的兩種方式,效果上是一樣的,只是一般用第二種方式比較簡單。


三、String類兩種創建方式的區別:

    1、s1在內存中有兩個對象(一個是new 一個是字符串對象在堆內存中,然後會存儲到常量池中)

    2、s2在內存中只有一個對象(該字符對象存在字符串常量池中,會先查看常量池中有沒有這個字符串常量,如果有就直接指向不用再創建了,如果沒有常量池中會創建)
    3、s2是一個類類型變量,指向對象,"java01"是一個對象。字符串是一個特殊的對象也是一個常量,初始化後不能改變,被雙引號裏面的都是對象(存在常量池中)

String s1 = "java01";
s1 = "java02";
System.out.println(s2);

最後的結果是java02,但不是java01這個對象變化了,而是s1的指向變成了指向java02這個對象,java01這個對象在內存中還是存在的。


四、比較兩個字符串是否相等(兩種比較方式):

String s1 = new String("java01");
String s2 = new String("java01");
System.out.println(s1==s2);//結果是false,因爲s1和s2都是用new關鍵字創建的對象,這是不屬於同一個對象(內存地址值不一樣),所以當然是不相等
System.out.println(s1.equals(s2));//結果爲true,因爲String類複寫了Object類中的equals方法,定義了自己的比較方式,只要String的參數相同則爲true否則爲false。

==和equals這兩種比較方式都是比較的對象的內存地址值,但是equals這個方法被String類複寫了,定義了自己的比較方式而已

String s1 = "java01";
String s2 = new String("java01");
String s3 = "java01";
System.out.println(s1==s2);//flase
System.out.println(s1==s3);//結果爲true,是因爲s1已經創建了字符串"java01",s3就不會再創建該字符串了,這樣可以節省空間,這代表着s1和s3指向同一個對象"java01"。


五、String類的使用:

1、獲取字符串的長度(注意是方法,不是跟數組的屬性一樣的) 

    int length();

public static void getLength(){
     String s = "java01";
     int len = s.length();
     System.out.println(len);
}


2、根據位置,獲取該位置的那一個字符(只能是單個字符)   

    char charAt(int index);

//根據指定位置獲取對應的那個字符,只能是一個字符不能是字符串
public static void getChar(){
     String s1 = "java01";
     char ch = s1.charAt(3);
     System.out.println(ch);
    //s1.charAt(45);當訪問到字符串中不存在的角標是會發生StringIndexOutOfBoundsException,即字符串角標越界異常
}

3、根據字符或字符串獲取索引,即根據字符或字符串獲取該字符或字符串在整個字符串中的位置,如果字符串中沒有該字符或字符串會返回-1

    int indexOf(int ch):返回的是ch在字符串中第一次出現的位置

    int indexOf(int ch,int fromIndex):從fromIndex指定位置開始查找,獲取ch在字符串中出現的位置

    int indexOf(String str):返回的是str在字符串中第一次出現的位置

    int indexOf(String str,int fromIndex):從fromIndex指定位置開始查找,獲取str在字符串中出現的位置

public static void getIndexOf(){
    String s = "javascript";
    int x1 = s.indexOf('s');
    int x2 = s.indexOf('a',2);
    int x3 = s.indexOf("script");
    int x4 = s.indexOf("script",2);
    System.out.println("x1="+x1+",x2="+x2+",x3="+x3+",x4="+x4);
}


4、反向索引一個字符或字符串出現的位置 

    public int lastIndexOf(int ch) 從字符串的最後向前查找,指定的字符是否存在,如果存在則返回位置,如果不存在則返回-1

    public int lastIndexOf(int ch,int fromIndex) 從字符串的指定的末尾向前查找,指定的字符是否存在,如果存在則返回位置,如果不存在則返回-1

public static void getLastIndexOf() {
    String s = "javascript";
    int x = s.lastIndexOf('a');
    System.out.println("x="+x);
}


5、獲取字符串中的一部分,即獲取子串     

    String substring(begin);//從指定位置開始到結尾包含頭    

    String substring(begin,end);//,指定開始和結尾 包含頭不包含尾

public static void getSubstring(){
    String s1 = "javascript";
    String s2 = s1.substring(4);
    String s3 = s1.substring(0,5);
    System.out.println("s2="+s2+",s3="+s3);
}


六、字符串轉換:

1、將字符數組轉成字符串

    構造函數:

        String(char[])
        Stirng(char[],fffset,count):將字符數組中的一部分轉換字符串

    靜態方法:(直接用String類名調用,如:String s = String.copyValueOf())
        static String copyValueOf(char[]);
        static String copyValueOf(char[] ,int offset, int count);(offset表示起始位,count表示個數.如果超過了字符數組的長度,也發生字符串角標越界)
        static String valueOf(char[]);
        static String valueOf(char[] data, int offset, int count)

public static void CharsToString(){
    char[] arr ={'j','a','v','a','s','c','r','i','p','t'};
    //通過String類的構造函數將字符數組轉成字符串(可以將字符數組的一部分轉成字符串)
    String s1 = new String(arr);
    String s2 = new String(arr,2,7);
    System.out.println("s1="+s1+",s2="+s2);
    
  //通過String類中的靜態方法將字符數組轉成字符串(可以將字符數組的一部分轉成字符串)
    String s3 = String.copyValueOf(arr);
    String s4 = String.copyValueOf(arr, 2, 7);
    System.out.println("s3="+s3+", s4="+s4);
}

2、將字符串轉成字符數組  

    char[] toCharArray();

public static void StringToChar(){
    String s = "javascript";
    char[] arr = s.toCharArray();
    for(char arrs : arr){
        System.out.println(arrs);
    }
}

3、將字節數組轉成字符串(只能用構造函數)

    String(byte[])
    Stirng(byte[],fffset,count):將字節數組中的一部分轉

    Stirng(byte[],String charsetName)(通過使用指定的charset解碼制定的byte數組,構造一個新的String)

String info = "小白是一個無節操,無干爹,無底線的三無少年";
        
        //把字符串轉換成字節數組
        byte[] bytes = info.getBytes();
        for(int i = 0;i<bytes.length; i++){
            System.out.print(bytes[i]+",");
        }
        System.out.println();
        
        //把字節數組轉換成字符串
        String s1 = new String(bytes);
        System.out.println("轉換後的字符串爲:"+s1);
        
        String s2 = new String(bytes,0,16);//結果是:小白是一個無節操,因爲一個漢字是兩個字節,如果是15的話最後一個漢字打印的是一個?  因爲找不到
        System.out.println("s2="+s2);
        
        
        String s3 = new String(bytes,"gbk");//系統是gbk編碼,如果這裏用了utf-8會變成亂碼
        System.out.println(s3);

4、將字符串轉成字節數組(字符串和字節數組在轉換過程中,是可以指定編碼表的。)     

    byte[] getBytes();

public static void StringToBytes(){
    String s1 = "javascript";
    byte[] arr = s1.getBytes();
    for(byte arrs : arr){
        System.out.println((char)arrs);
    }
}

String info = "小白是一個無節操,無干爹,無底線的三無少年";
        
        //把字符串轉換成字節數組
        byte[] bytes = info.getBytes();
        for(int i = 0;i<bytes.length; i++){
            System.out.print(bytes[i]+",");
        }

5、將基本的數據類型轉成字符串

    static String valueOf(int)        

    static String valueOf(double)

    3+"";     String.valueOf(3);//這是一樣的

 

6、將字符串轉成大寫或者小寫          

    String toUpperCase();           

    String toLowerCase();

public static void ToUpper_Lower(){
    String s1 = "javascript";
    String s2 = s1.toUpperCase();//轉成大寫
    String s3 = s2.toLowerCase();//轉成小寫
    System.out.println("s2="+s2+",s3="+s3);    
}


七、字符串判斷:

1、字符串中是否含某一個子串(不能判斷是否包含某一個字符,只能是字符串)  

    boolean contains(String str);        //返回一個字符串是否存在,存在返回true 不存在返回false

     特殊之處:indexOf(str)可以索引str第一次出現位置,如果返回-1,表示該str不在字符串中存在  所以也可以用於對指定判斷是否包含 該方法既可以判斷又可以獲取出現的位置
     只用於判斷時用contains,既要判斷又要獲取位置用indexOf

public static void containsDemo() {
    String s = "javascript";
    boolean b = s.contains("java");
    System.out.println(b);
}

2、字符中是否有內容  

    boolean isEmpty();       //就是判斷長度是否爲0

public static void isEmptyDemo() {
    String s = " ";//空格也是一個字符
    boolean b = s.isEmpty();
    System.out.println(b);
}

3、字符串是否以指定的內容開頭與字符是否是以指定內容結尾(接受的是字符串)

    boolean startsWith(str);

    boolean startsWith(str,int toffset);//從指定的位置開始判斷是否以指定的內容開頭

    boolean endsWith(str);

public static void startsWith_endsWith() {
    String s = "Array.java";
    boolean b1 = s.startsWith("Array");//開發中可以用於判斷該文件名稱是否是Array單詞開頭
    boolean b2 =s.endsWith(".java");//開發中可以用於判斷該文件名的後綴是否是.java文件
    System.out.println("b1="+b1+",b2="+b2);        
}

4、判斷字符串內容是否相同

    (複寫了Object類中的equals方法,定義了自己的比較方式,比較字符串內容是否相同,相同爲true,不相同爲false)  boolean equals(str);

public static void equalsDemo() {
    String s1 = "javascript";
    String s2 = "javascript";
    String s3 = "html+CSS";
    boolean b1 = s1.equals(s2);
    boolean b2 = s1.equals(s3);
    System.out.println("b1="+b1+",b2="+b2);
}

判斷內容是否相同,並忽略大小寫    boolean equalsIgnoreCase();


5、對兩個字符串進行自然順序的比較(該方法能比較出誰大誰小,而equals只是比較兩個對象是否相等)  

    int compareTo(string);

     對象之間的比較用的是compareTo方法,基本數據類型數據之間的比較用的是大於號,小於號,等於號這些運算符

public static void compareToDemo() {
    String s1 = "javascript";
    String s2 = "javascript";
    String s3 = "java";
    int b1 = s1.compareTo(s2);
    int b2 = s1.compareTo(s3);
    int b3 = s3.compareTo(s1);
    System.out.println("b1="+b1+",b2="+b2+",b3="+b3);
}


 

 

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