Java筆記 - String類

字符串對象一旦被初始化就不會改變

String s = "abc";
s = "nba";
String s1 = "abc";
System.out.println(s==s1);

輸出結果:true

s只是一個引用變量,開始指向的是abc對象,後來指向nba對象,但是abc對象本身是不會改變的
在字符串建立的時候,內存中會建立一個字符串緩衝區,也可以理解成字符串常量池。開始時常量池是空的,在建立s的時候,系統會在常量池中尋找是否存在abc的字符串,如果不存在,就會建立這個字符串,然後把地址值賦給s。在建立s1的時候,系統也會先在常量池中尋找是否存在abc的字符串,發現存在後,就會直接把這個地址值賦給s1,所以s和s1的地址值是相等的,結果返回true。

字符串既然是對象,所以也可以通過new關鍵字來創建。String類中有String(String original)構造方法,可以接收字符串,也就是可以通過new來創建字符串對象。

String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1==s2);

輸出結果:false

第一句是在字符串常量池中創建了一個對象,然後把這個地址值賦給s1。
第二句是在堆內存中創建了一個字符串abc對象,然後通過new創建了一個對象,再把字符串abc作爲參數傳遞給String構造函數。
所以他們的地址值是不一樣的。
調用equals函數進行比較輸出結果是false,因爲String類複寫了Object中的方法,比較的是字符串中的內容。

  • 構造函數
    String(byte[] bytes):通過byte數組構造字符串對象,byte數組中的內容會根據Unicode錶轉換成字符對象再連接起來組成字符串。
    String(byte[] bytes, int offset, int length):通過byte數組的子數組構造字符串對象,offset:子數組第一個byte開始索引,length:子數組長度
    String(char[] value):通過char數組構造字符串對象
    String(cahr[] value,int offset ,int count):通過字符數組的子數組構造字符串對象,offset:子數組第一個字符的索引,count:子數組長度
    String(StringBuffer buffer):通過StringBuffer構造字符串對象
    例:

    byte[] b = {97,98,99,100};
    char[] ch = {'q','w','e','r'};
    StringBuffer sb = new StringBuffer();
    sb.append("abc1");
    sb.append("abc2");
    sb.append("abc3");
    sb.append("abc4");
    String s1 = new String(b);
    String s2 = new String(b,1,3);
    String s3 = new String(ch);
    String s4 = new String (ch,1,3);
    String s5 = new String(sb);
    
    System.out.println(s1);
    System.out.println(s2);
    System.out.println(s3);
    System.out.println(s4);
    System.out.println(s5);
    

    輸出結果:
    abcd
    bcd
    qwer
    wer
    abc1abc2abc3abc4

  • 一般函數

    1. 獲取
      1.1
      int length():獲取字符串中字符的個數(長度)
      1.2
      char charAt(int index):根據位置獲取字符
      1.3
      int indexOf(int ch):返回指定字符在字符串中第一次出現的索引,參數爲字符或Unicode代碼點,如果存在該參數字符則返回索引,如果不存在返回-1
      int indexOf(int ch, int fromIndex):返回指定字符在字符串中第一次出現的索引,在指定位置處開始搜索(向右)
      int indexOf(String str):返回參數字符串在字符串中第一次出現的索引
      int indexOf(String str, int fromIndex):返回參數字符串在字符串指定位置第一次出現的索引

      int lastIndexOf(int ch):返回指定字符在字符串中最後一次出現的索引
      int lastIndexOf(int ch ,int fromIndex):返回指定字符在字符串中的索引,在指定位置反向搜索(向左)
      int lastIndexOf(String str):返回參數字符串在字符串中最後一次出現的索引
      int lastIndexOf(String str, int fromIndex):返回參數字符串在字符串指定位置最後一次出現的索引
      1.4
      String subString(int beginIndex):獲取字符串的子串,從開始索引一直到字符串末尾
      String subString(int beginIndex, int endIndex)獲取字符串中一部分字符串,也叫子串。包括begin,不包括end。

      例:

      String str = new String("eabcdebc");
      
      System.out.println(str.length());
      System.out.println(str.charAt(6));
      System.out.println(str.indexOf('a'));
      System.out.println(str.indexOf('c',4));
      System.out.println(str.lastIndexOf('e',4));
      System.out.println(str.substring(2,5));
      

      輸出結果:
      8
      b
      1
      7
      0
      bcd

    2. 轉換
      2.1 String[] split(String regex):將字符串編程字符串數組(字符串的切割),涉及到正則表達式
      2.2 char[] toCharArray():將字符串變成字符數組,會根據Unicode將字符串中的內容變成對應的byte值。
      2.3 byte[] getBytes():將字符串變成字節數組
      2.4 String toUpperCase():將字符串中的字母變成大寫
      String toLowerCase():將字符串中的字母變成小寫
      2.5 String replace(char oldch, char newch):用新字符替換舊字符,返回一個新的字符串
      String replace(String s1, String s2):用新字符串替換舊字符串,返回一個新的字符串
      2.6 String trim():將字符串兩端的空格去掉
      2.7 String concat(String str) :連接兩個字符串,將str連接到String的結尾
      例:

      String str1 = "張三,李四,王五";
      String[] arr = str1.split(",");
      char[] ch = str1.toCharArray();
      String str2 = "ab你";
      String s3 = "ABC".toLowerCase();
      String s4 = str2.replace('a','z');
      String s5 = "     a     b     c      ".trim();
      String s6 = str1.concat("abc");
      

      輸出結果:
      abc
      zb你
      a b c
      張三,李四,王五abc

    3. 判斷
      3.1
      boolean equals(Object obj):判斷兩個字符串是否相同,如果相同返回ture,否則返回false。這個方法覆蓋了Object中的equals方法,Object方法中比較的是對象的地址值,這裏比較的是字符串中的內容。
      boolean equalsIgnoreCase(String anotherString):忽略大寫比較字符串內容(原理是將字符串轉成小寫再進行比較)。
      3.2
      boolean contains(string str):字符串中是否包含參數字符串,包含就返回ture,否則返回false
      3.3
      boolean startsWith(string):字符串是否以指定字符串開頭
      boolean endsWith(string):字符串是否以指定字符串結尾
      例:

      String s = "abc";
      System.out.println(s.equals("abc"));
      System.out.println(s.equalsIgnoreCase("AbC"));
      System.out.println(s.contains("ab"));
      System.out.println(s.startsWith("ab"));
      

      輸出結果:
      true
      true
      true
      true

    4. 比較
      int compareTo(String anotherString):按照字典順序比較兩個字符串,結果返回一個Unicode差值,如果字符串相等則返回0。
      例:

      String str1 = new String("abc");
      String str2 = new String("abc");
      System.out.println(str1.equals(str2));
      System.out.println(str1.compareTo(str2));
      System.out.println(str1 == str2);
      

      輸出結果:
      true
      0
      false

    5. 其他
      valueOf(int i):返回int參數的字符串表示形式(沒有byte和short)

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