String類 基礎知識與應用技巧 學習筆記

 


本文查閱方法:
    一、查閱目錄 —— 查閱本文目錄,肯定想要查閱的目錄標題
    二、快捷「查找」 —— 在當前瀏覽器頁面,按鍵 「Ctrl+F」 按鍵組合,開啓瀏覽器的查找功能,
             在查找搜索框中 輸入須要查閱的 目錄標題,即可以直接到達 標題內容 的位置。
    三、學習小結 —— 文中的學習小結內容,是筆者在學習以後總結出的,開發時可直接參考其進行應用開發的內容, 進一步加快了本文的查閱 速度。(水平有限,僅供參考。)java

 

 

 


 

 

 

本文目錄面試

 

  一、String類介紹及其 四個重要知識點正則表達式

 

  二、String類的經常使用方法-- 獲取。數組

 

  三、String類的經常使用方法-- 判斷。瀏覽器

 

  四、String類的經常使用方法-- 轉換。安全

 

  五、String類的經常使用方法-- 替換app

 

  六、String類的經常使用方法-- 切割函數

 

  七、String類的經常使用方法-- 截取子串。學習

 

  八、String類的經常使用方法-- 格式轉換、去除空格、順序比較。ui

 

  九、String類綜合應用Demo樣例

 

    (1)模擬一個trim方法實現去除字符串兩端的空格操做。

 

    (2)將一個字符串進行反轉。

 

    (3)獲取一個字符串在另外一個字符串中出現的次數。  

 

    (4)獲取兩個字符串中最大相同子串。

 

  十、StringBuffer類的介紹

 

  十一、StringBuffer類的經常使用方法-- 存儲。

 

  十二、StringBuffer類的經常使用方法-- 刪除。

 

  1三、StringBuffer類的經常使用方法-- 獲取。

 

  1四、StringBuffer類的經常使用方法-- 修改。

 

  1五、StringBuffer類的經常使用方法-- 反轉。

 

  1六、StringBuffer類的經常使用方法-- 將緩衝區中指定數據存儲到指定字符數組中。

 

  1七、StringBuffer類綜合應用Demo樣例

 

 

 

 

 


 

 

 

 

 

學習小結

 

String類經常使用方法速查

 

  (1)int length():獲取長度。

 

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

 

  (3)int lastIndexOf(int ch) :反向索引一個字符出現位置。

 

  (4)boolean contains(str):字符串中是否包含某一個子串。

 

  (5)boolean startsWith(str);字符串是不是以指定內容開頭。

 

  (6)boolean equals(str);判斷字符串內容是否相同。複寫了Object類中的equals方法。

 

  (7)String(char[],offset,count):將字符數組中的一部分轉成字符串。

 

  (8)byte[]  getBytes():將字符串轉成字節數組。

 

  (9)String(byte[],offset,count):將字節數組中的一部分轉成字符串。

 

  (10)static String valueOf(int):將基本數據類型轉成字符串。

 

  (11)String[] split(regex); 注:此參數當爲正則表達式時,很是精妙,參見《正則表達式》一文。

 

  (12)String substring(begin,end):獲取子串  

 

  (13)String trim():將字符串兩端的多個空格去除。

 

  (14)String toUpperCase();將字符串轉成大寫或小寫。

 

  (15)String toLowerCase();將字符串轉成大寫或小寫。

 

 

 

StringBuffer類經常使用方法速查

 

  (1)StringBuffer append():將指定數據做爲參數添加到已有數據結尾處。

 

  (2)StringBuffer deleteCharAt(index):刪除指定位置的字符。  

 

  (3)int length() :獲取長度。

 

  (4)String substring(int start, int end) :獲取子串  

 

  (5)char charAt(int index) :根據位置獲取指定位置上某個字符。

 

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

 

  (7)int lastIndexOf(String str) :反向索引指定字符串出現位置。

 

 

 

 

 

 

 


 

 

 

一、String類介紹及其 四個重要知識點

 

  String類是對字符串事物的描述。

 

  字符串是一個特殊的對象。 

 

  字符串一旦初始化就不能夠被改變。 

 

 

 

  如下面兩句代碼爲例,瞭解四個知識點:

 

  String s1= "abc"; 

 

  String s2 = new String("abc"); 

 

 

 

  知識點一:s1是一個String類類型的變量, "abc"是一個對象。

 

  知識點二:字符串最大特色:一旦被初始化就不能夠被改變。

 

  知識點三:s1和s2有什麼區別?(面試題常考)

 

        s1在內存中有一個對象。

 

        s2在內存中有兩個對象。

 

  知識點四:String類複寫了Object類中equals方法,該方法用於判斷字符串內容是否相同。

 

    System.out.println(s1==s2);      結果:false

 

    System.out.println(s1.equals(s2));  結果:true

 

 

 


 

 

 

二、String類的經常使用方法-- 獲取。

 

  (1) 字符串中的包含的字符數,也就是字符串的長度。

 

    int length():獲取長度。

 

  (2) 根據位置獲取指定位置上某個字符。

 

    char charAt(int index):

 

  (3) 根據字符獲取該字符在字符串中位置。

 

    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在字符串中出現的位置。

 

 

 

    int lastIndexOf(int ch) :

 

 

 

  Demo樣例:

 

  public static void method_get()

 

  {

 

    String str = "abcdeakpf";

 

 

 

    //長度

 

    System.out.println(str.length());

 

 

 

    //根據索引獲取字符。

 

    System.out.println(str.charAt(4));//當訪問到字符串中不存在的角標時會發生StringIndexOutOfBoundsException。

 

 

 

    //根據字符獲取索引

 

    System.out.println(str.indexOf('m',3));//若是沒有找到,返回-1.

 

 

 

    //反向索引一個字符出現位置。

 

    System.out.println(str.lastIndexOf("a"));    

 

  }

 

 

 


 

三、String類的經常使用方法-- 判斷。

 

  (1) 字符串中是否包含某一個子串。

 

    boolean contains(str):

 

    特殊之處:indexOf(str):能夠索引str第一次出現位置,若是返回-1.表示該str不在字符串中存在。

 

        因此,也能夠用於對指定判斷是否包含。

 

        if(str.indexOf("aa")!=-1)

 

        並且該方法便可以判斷,又能夠獲取出現的位置。

 

 

 

  (2) 字符串中是否有內容。

 

    boolean isEmpty(): 原理就是判斷長度是否爲0. 

 

  (3) 字符串是不是以指定內容開頭。

 

    boolean startsWith(str);

 

  (4) 字符串是不是以指定內容結尾。

 

    boolean endsWith(str);

 

  (5) 判斷字符串內容是否相同。複寫了Object類中的equals方法。

 

    boolean equals(str);

 

  (6) 判斷內容是否相同,並忽略大小寫。

 

    boolean equalsIgnoreCase();

 

 

 

  Demo樣例:

 

  public static void method_is()

 

  {

 

    String str = "ArrayDemo.java";

 

 

 

    //判斷文件名稱是不是Array單詞開頭。

 

    System.out.println(str.startsWith("Array"));

 

    //判斷文件名稱是不是.java的文件。

 

    System.out.println(str.endsWith(".java"));

 

    //判斷文件中是否包含Demo

 

    System.out.println(str.contains(".java"));

 

  }

 

 

 


 

 

 

四、String類的經常使用方法-- 轉換。

 

  (1) 將字符數組轉成字符串。

 

    構造函數:String(char[])

 

          String(char[],offset,count):將字符數組中的一部分轉成字符串。

 

 

 

    靜態方法:

 

        static String copyValueOf(char[]);

 

        static String copyValueOf(char[] data, int offset, int count) 

 

        static String valueOf(char[]):

 

 

 

  (2) 將字符串轉成字符數組。

 

      char[] toCharArray():

 

 

 

  (3) 將字節數組轉成字符串。

 

      String(byte[])

 

      String(byte[],offset,count):將字節數組中的一部分轉成字符串。

 

 

 

  (4) 將字符串轉成字節數組。

 

      byte[]  getBytes():

 

    特殊:字符串和字節數組在轉換過程當中,是能夠指定編碼表的。

 

 

 

  (5) 將基本數據類型轉成字符串。

 

    static String valueOf(int)

 

    static String valueOf(double)

 

    //3+"";//String.valueOf(3);

 

 

 

  Demo樣例:

 

  public static void method_trans()

 

  {

 

    char[] arr = {'a','b','c','d','e','f'};

 

    String s= new String(arr,1,3);

 

    System.out.println("s="+s);

 

    String s1 = "zxcvbnm";

 

    char[] chs = s1.toCharArray();

 

    for(int x=0; x<chs.length; x++)

 

    {

 

      System.out.println("ch="+chs[x]);

 

    }

 

  }

 

 

 


 

 

 

五、String類的經常使用方法-- 替換

 

  String replace(oldchar,newchar);

 

 

 

  Demo樣例:

 

  public static void method_replace()

 

  {

 

    String s = "hello java";

 

    //String s1 = s.replace('q','n');//若是要替換的字符不存在,返回的仍是原串。

 

    String s1 = s.replace("java","world");

 

    System.out.println("s="+s);

 

    System.out.println("s1="+s1);

 

  }

 

 

 


 

 

 

六、String類的經常使用方法-- 切割

 

  String[] split(regex); 注:此參數當爲正則表達式時,很是精妙,參見《正則表達式》一文。

 

 

 

  Demo樣例:

 

  public static void  method_split()

 

  {

 

    String s = "zhagnsa,lisi,wangwu";

 

    String[] arr  = s.split(",");

 

    for(int x = 0; x<arr.length; x++)

 

    {

 

      System.out.println(arr[x]);

 

    }

 

  }

 

 

 


 

 

 

七、String類的經常使用方法-- 截取子串。

 

  獲取字符串中的一部分。

 

  String substring(begin);

 

  String substring(begin,end);

 

 

 

  Demo樣例:

 

  public static void method_sub()

 

  {

 

    String s = "abcdef";

 

    System.out.println(s.substring(2));//從指定位置開始到結尾。若是角標不存在,會出現字符串角標越界異常。

 

    System.out.println(s.substring(2,4));//包含頭,不包含尾。s.substring(0,s.length());

 

  }

 


 

 

 

八、String類的經常使用方法-- 格式轉換、去除空格、順序比較。

 

  (1) 將字符串轉成大寫或小寫。

 

     String toUpperCase();

 

     String toLowerCase();

 

 

 

  (2) 將字符串兩端的多個空格去除。

 

    String trim();

 

 

 

  (3) 對兩個字符串進行天然順序的比較。

 

    int compareTo(string);

 

 

 

  Demo樣例:

 

  public static void method_7()

 

  {

 

    String s = "    Hello Java     ";

 

    System.out.println(s.toLowerCase());

 

    System.out.println(s.toUpperCase());

 

    System.out.println(s.trim());

 

 

 

    String s1 = "a1c";

 

    String s2 = "aaa";

 

 

 

    System.out.println(s1.compareTo(s2));

 

  }

 

 

 


 

 

 

九、String類綜合應用Demo樣例

 

  (1)模擬一個trim方法實現去除字符串兩端的空格操做。

 

    思路:

 

    a,判斷字符串第一個位置是不是空格,若是是繼續向下判斷,直到不是空格爲止。

 

      結尾處判斷空格也是如此。

 

    b,當開始和結尾都判斷到不是空格時,就是要獲取的字符串。

 

 

 

  Demo樣例:

 

  class StringTest 

 

  {

 

    public static void sop(String str)

 

    {

 

      System.out.println(str);

 

    }

 

    public static void main(String[] args) 

 

    {

 

      String s = "      ab cd      ";

 

      System.out.println("("+s+")");

 

       s = myTrim(s);

 

       System.out.println("("+s+")");

 

    }

 

    //練習一,去除字符串兩端空格。

 

    public static String myTrim(String str)

 

    {

 

      int start = 0,end = str.length()-1;

 

 

 

      while(start<=end && str.charAt(start)==' ')

 

        start++;

 

 

 

      while(start<=end && str.charAt(end)==' ')

 

        end--;

 

 

 

      return str.substring(start,end+1);

 

    }

 

  }

 

 

 


 

  (2)將一個字符串進行反轉。

 

    將字符串中指定部分進行反轉,"abcdefg";abfedcg

 

    思路:

 

    a,曾經學習過對數組的元素進行反轉。

 

    b,將字符串變成數組,對數組反轉。

 

    c,將反轉後的數組變成字符串。

 

    d,只要將或反轉的部分的開始和結束位置做爲參數傳遞便可。

 

 

 

    Demo樣例:

 

    class StringTest 

 

    {

 

      public static void main(String[] args) 

 

      {

 

        String s = "      ab cd      ";

 

        System.out.println("("+s+")");

 

        System.out.println("("+reverseString(s)+")");      

 

      }

 

 

 

      //練習:將字符串反轉。

 

      /*

 

      思路:

 

      1,將字符串變成數組。

 

      2,對數組反轉。

 

      3,將數組變成字符串。

 

      */

 

      public static String reverseString(String s,int start,int end)

 

      {

 

        //字符串變數組。

 

        char[] chs = s.toCharArray();

 

 

 

        //反轉數組。

 

        reverse(chs,start,end);

 

 

 

        //將數組變成字符串。

 

        return new String(chs);

 

      }

 

      public static String reverseString(String s)

 

      {

 

        return reverseString(s,0,s.length());        

 

      }

 

 

 

      private static void reverse(char[] arr,int x,int y)

 

      {

 

        for(int start=x,end=y-1; start<end ; start++,end--)

 

        {

 

          swap(arr,start,end);

 

        }

 

      }

 

      private static void swap(char[] arr,int x,int y)

 

      {

 

        char temp = arr[x];

 

        arr[x] = arr[y];

 

        arr[y] = temp;

 

      }    

 

    }

 

 

 


 

  (3)獲取一個字符串在另外一個字符串中出現的次數。  

 

    思路:

 

    a,定義個計數器。

 

    b,獲取kk第一次出現的位置。

 

    c,從第一次出現位置後剩餘的字符串中繼續獲取kk出現的位置。

 

      每獲取一次就計數一次。

 

    d,當獲取不到時,計數完成。

 

 

 

    Demo樣例:

 

    class  StringTest2

 

    {

 

      public static void main(String[] args) 

 

      {

 

        String str = "kkabkkcdkkefkks";

 

        ///System.out.println("count====="+str.split("kk").length);不建議使用。

 

        System.out.println("count="+getSubCount_2(str,"kk"));

 

      }

 

 

 

      //方式一:

 

      public static int getSubCount(String str,String key)

 

      {

 

        int count = 0;

 

        int index = 0;

 

 

 

        while((index=str.indexOf(key))!=-1)

 

        {

 

          System.out.println("str="+str);

 

          str = str.substring(index+key.length());

 

 

 

          count++;  

 

        }

 

        return count;

 

      }

 

 

 

      //方式二:

 

      public static int getSubCount_2(String str,String key)

 

      {

 

        int count = 0;

 

        int index = 0;

 

 

 

        while((index= str.indexOf(key,index))!=-1)

 

        {

 

          System.out.println("index="+index);

 

          index = index + key.length();

 

 

 

          count++;

 

        }

 

        return count;

 

      }  

 

    }

 

 

 

 

 


 

  (4)獲取兩個字符串中最大相同子串。

 

    第一個動做:將短的那個串進行長度一次遞減的子串打印。

 

    思路:

 

      1,將短的那個子串按照長度遞減的方式獲取到。

 

      2,將每獲取到的子串去長串中判斷是否包含,

 

        若是包含,已經找到!。

 

    Demo樣例:

 

    class  StringTest3

 

    {

 

      public static void main(String[] args) 

 

      {

 

        String s1 = "ab";

 

        String s2 = "cvhellobnm";

 

        System.out.println(getMaxSubString(s2,s1));

 

      }

 

 

 

      public static void sop(String str)

 

      {

 

        System.out.println(str);

 

      }

 

 

 

      public static String getMaxSubString(String s1,String s2)

 

      {

 

 

 

        String max = "",min = "";

 

        max = (s1.length()>s2.length())?s1: s2;

 

        min = (max==s1)?s2: s1;        

 

    //    System.out.println("max="+max+"...min="+min);

 

        for(int x=0; x<min.length(); x++)

 

        {

 

          for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++)

 

          {

 

            String temp = min.substring(y,z);            

 

            System.out.println(temp);

 

            if(max.contains(temp))//if(s1.indexOf(temp)!=-1)

 

              return temp;

 

          }

 

        }

 

        return "";

 

      }      

 

    }

 

 

 


 

 

 

十、StringBuffer類的介紹

 

  StringBuffer是字符串緩衝區,字符串的組成原理就是經過該類實現的。 

 

  StringBuffer是可變長度的,能夠對字符串內容進行增刪。

 

  StringBuffer是一個容器,不少方法與String相同,最終會經過toString方法變成字符串。

 

  StringBuffer能夠字節操做多個數據類型。

 

 

 

  JDK1.5 版本以後出現了StringBuilder,區別是 

 

    StringBuffer是同步的:線程安全可是效率低,不建議使用。

 

    StringBuilder是非同步:非線程安全,可是執行效率高 ,建議使用。 

 

    之後開發,建議使用StringBuilder

 

  升級三個因素(或目的):

 

    a,提升效率。

 

    b,簡化書寫。

 

    c,提升安全性。

 

 

 


 

十一、StringBuffer類的經常使用方法-- 存儲。

 

  StringBuffer append():將指定數據做爲參數添加到已有數據結尾處。

 

  StringBuffer insert(index,數據):能夠將數據插入到指定index位置。  

 

  Demo樣例:

 

  public static void method_add()

 

  {

 

    StringBuffer sb = new StringBuffer();

 

 

 

    //sb.append("abc").append(true).append(34);

 

     //StringBuffer sb1 = sb.append(34);

 

     //System.out.println("sb==sb1:"+(sb==sb1));

 

 

 

    sb.insert(1,"qq");

 

    System.out.println(sb.toString());//abctrue34

 

    //System.out.println(sb1.toString());    

 

  }

 

 

 


 

十二、StringBuffer類的經常使用方法-- 刪除。

 

  StringBuffer delete(start,end):刪除緩衝區中的數據,包含start,不包含end。

 

  StringBuffer deleteCharAt(index):刪除指定位置的字符。  

 

  Demo樣例:

 

  public static void method_del()

 

  {

 

    StringBuffer sb  = new StringBuffer("abcde");

 

 

 

      //sb.delete(1,3);

 

    //清空緩衝區。

 

    //sb.delete(0,sb.length());

 

 

 

    //sb.delete(2,3);

 

    sb.deleteCharAt(2);

 

    System.out.println(sb.toString());

 

  }

 

 

 


 

1三、StringBuffer類的經常使用方法-- 獲取。

 

  char charAt(int index) 

 

  int indexOf(String str) 

 

  int lastIndexOf(String str) 

 

  int length() 

 

  String substring(int start, int end)     

 

 

 


 

1四、StringBuffer類的經常使用方法-- 修改。

 

  StringBuffer replace(start,end,string);

 

  void setCharAt(int index, char ch) ;  

 

  Demo樣例:

 

  public static void method_update()

 

  {

 

    StringBuffer sb  = new StringBuffer("abcde");

 

    //sb.replace(1,4,"java");

 

    sb.setCharAt(2,'k');

 

    System.out.println(sb.toString());  

 

  }

 

 

 


 

1五、StringBuffer類的經常使用方法-- 反轉。

 

  StringBuffer reverse();   

 

 

 


 

1六、StringBuffer類的經常使用方法-- 將緩衝區中指定數據存儲到指定字符數組中。

 

  void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 

 

  Demo樣例:

 

  class StringBufferDemo 

 

  {

 

    public static void main(String[] args) 

 

    {

 

      //method_update();

 

      StringBuilder sb = new StringBuilder("abcdef");    

 

      char[] chs = new char[6];

 

      sb.getChars(1,4,chs,1);//將

 

      for(int x=0; x<chs.length; x++)

 

      {

 

        System.out.println("chs["+x+"]="+chs[x]+";");

 

      }

 

      draw(3,6);

 

      draw(8,9);

 

    }

 

    //畫等腰三角形的星星圖狀

 

    public static void draw(int row,int col)

 

    {

 

      StringBuilder sb = new StringBuilder();

 

      for(int x=0; x<row; x++)

 

      {

 

        for(int y=0; y<col; y++)

 

        {

 

          sb.append("*");

 

        }

 

        sb.append("\r\n");

 

      }

 

      System.out.println(sb.toString());

 

    }

 

  }

 

 

 


 

1七、StringBuffer類綜合應用Demo樣例

 

  對字符串中字符進行天然順序排序。

 

  思路:

 

  1,字符串變成字符數組。

 

  2,對數組排序,選擇,冒泡,Arrays.sort();

 

  3,將排序後的數組變成字符串。

 

 

 

 

 


 

 敬請評論

(1)若您以爲本文 有用處  —— 請留言評論,以堅決其餘 IT童鞋 閱讀本文的信心。

(2)若您以爲本文 沒用處  —— 請留言評論,筆者將會改進不足,以便爲你們整理更加好用的筆記。

 

 

 


 

相關文章
相關標籤/搜索