好程式設計師大資料學習路線分享大資料之字串

好程式設計師IT發表於2019-09-25

  好程式設計師大資料學習路線分享大資料之 字串 不可變字串:----String. 字串本身不能發生改變 , 與指向字串的引用無關

        String s1 = "1000phone";

     可變字串 :----StringBuilder/StringBuffer. 字串本身可以發生變化 , 與指向可變字串的引用無關

        StringBuffer sBuffer = new StringBuffer("1000phone");

不可變字串本身是一個常量,儲存在常量區,是儲存在了堆區中一塊兒特殊的區域裡。

 

字串常量的特點:同一個字串常量在常量區只允許儲存一個。

 

    String s = "1000phone";// 不可變字串

      當執行 s 的時候 , 會到常量區找叫 1000phone 的字串 , 如果有直接讓 s 儲存他的地址 , 如果沒有 , 會在常量區開闢一塊兒空間存 1000phone.

    

    String s3 = new String("1000phone");

      執行 s3 , 由於進行了 new, 一定會現在堆中開闢一塊兒空間 , 1000phone 是作為引數傳給了物件 . 儲存在了物件的一個 String

使用equals 進行 String 的比較

 

2. 轉換

將字元陣列轉換成字串

     char[] arr = {'p','h','o','n','e'};

     String string1 = new String(arr);  //string1 = phone

 

將字串轉換成字元陣列

    char[] arr1 = string.toCharArray();

    System.out.println(arr1);

 

將位元組陣列轉成字串

        //String(byte[] bytes) 

        //String(byte[] bytes, int offset, int length)

        //String(byte[] bytes, String charsetName)// 使用指定的編碼將位元組陣列轉換成字元成

        byte[] bytes = {97,98,99,100};

        String string3 = new String(bytes);

        System.out.println(string3); //abcd

 

將字串轉成位元組陣列

        //byte[] getBytes() 

        byte[] bytes1 = string3.getBytes();

 

將基本資料型別轉換成字串

        //String.valueOf()

        String string4 = String.valueOf(true);

        System.out.println(string4);//true

 

子串:

    // 包含起始位置,不包含結束位置,到結束位置的前一位

    String substring(int beginIndex, int endIndex);

 

大小寫轉換

        String toLowerCase();  //  轉成小寫

        String toUpperCase();  //  轉成大寫

 

按字典順序比較兩個字串

     字典順序 : 按照 ASCII 表比較當前的兩個字元 ,ASCII 碼大的認為是大的字元

     規則 : 從左邊第一個字元開始比較

     如果當前的字元不相同 , 直接認為 ASCII 大的字串是大字串 , 後面的字元停止比較

     當前字元比較的具體規則 : 使用前面的字元 - 後面的字元 , 返回差值 . 如果是負數 , 說明前面的字串小於後面的 . 反之前面的大 .

     如果當前的字元相同 , 再去比較第二個字元 , 依次往後推 , 如果比到最後都相同 , 則認為兩個字串相等 , 差值返回 0.

    

        "1000PHone".compareTo("1000PHone");//0

        "1000AHone".compareTo("1000BHone");//-1

        "100000".compareTo("100");//-3

 

可變字串:

  字串緩衝區 .StringBuffer/StringBuilder

  區別 :

 StringBuffer: 出現在 jdk1.0, 是執行緒安全的 , 考慮了執行緒安全問題

 StringBuilder: 出現在 jdk1.5, 是執行緒不安全的 , 沒有考慮執行緒安全問題

注意: 在不考慮執行緒安全問題時 , 儘量使用 StringBuilder, 因為速度快 , 效率高

 

使用:

    StringBuffer sBuffer = new StringBuffer();

    //1. 儲存:

    //StringBuffer append(boolean b)    從最後插入

    sBuffer.append("abcd"); //abcd

    

    //StringBuffer insert(int offset, boolean b)    從指定位置插入

    sBuffer.insert(4, 123);

    System.out.println(sBuffer);//abcd123

    

    //2. 刪除:

    //StringBuffer delete(int start, int end)    刪除一部分字串

    //StringBuffer deleteCharAt(int index)   刪除一個字元

    System.out.println(sBuffer.deleteCharAt(4));//abcd23

    System.out.println(sBuffer.delete(2,4)); //ab23

    

    //3. 修改:

    //StringBuffer replace(int start, int end, String str)   替換指定的子字串

    //void setCharAt(int index, char ch)  修改一個字元

    sBuffer.replace(1, 3, "ab") ; //aab3

    

    //4. 獲取:

    //char charAt(int index) 

    System.out.println(sBuffer.charAt(0)); //a

 

    // 返回指定子字串的下標    從左到右

    //int indexOf(String str)

    System.out.println(sBuffer.indexOf("ab"));//1

 

    // 返回指定子字串在此字串中第一次出現處的索引,從指定的索引開始。

    System.out.println(sBuffer.indexOf("ab",0)); //1

    System.out.println(sBuffer.indexOf("ab",2)); //-1

    

    //int lastIndexOf(String str) 

    // 返回指定子字串 ( 從右邊開始計數 ) 在此字串第一次出現時的索引

    System.out.println(sBuffer.indexOf("ba")); //-1

    System.out.println(sBuffer.indexOf("ab")); //1

 

    //int lastIndexOf(String str, int fromIndex) 

    / 返回指定字元在此字串中最後一次出現處的索引,從指定的索引處開始進行反向搜尋。

    System.out.println(sBuffer.indexOf("ab",1)); //1

 

    //5. 反轉:

    //StringBuffer reverse()

System.out.println(sBuffer.reverse()); //3baa

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2658216/,如需轉載,請註明出處,否則將追究法律責任。

相關文章