JAVA基礎--JAVA API常見對象(字符串&緩衝區)

1、 String 類型

  1. String類引入

 

    次日學習過Java中的常量:java

 

               常量的分類:面試

 

                       數值型常量:整數,小數(浮點數)數組

 

                       字符型常量:使用單引號引用的數據安全

 

                       字符串常量:使用雙引號引用的數據學習

 

                       布爾型常量:true或false測試

 

                       null常量:nullui

 

             上述的大部分的常量均可以使用Java中提供的8種基本類型進行開闢空間,存儲這些常量。線程

 

             字符串常量不屬於8種基本類型中的數據。而它屬於Java中的引用類型數據(類類型數據)。設計

 

        字符串數據在Java中使用String類進行描述。code

 

        字符串數據它屬於Java中一類數據,咱們也能夠把其看做一類事物。既然是一類事物,就必定可使用Java中的某個類對其進行封裝和描述。

 

        後期咱們學習的目標和重點:

 

                 再也不是如何去描述一個類(不是去定義類)。而是要學習怎麼去使用別人(JDK)中提供好的類。須要知道這些類是幹什麼的,以及它中有哪些經常使用的方法,這些方法可以解決什麼問題。

 

                   後期學習新的類的時候,學習方式:

 

                           重點是使用本身的代碼去測試這些類中的方法,並獲得本身的結論。

    2.String 類介紹

           

      String 類表明字符串。Java 程序中的全部字符串字面值(如 "abc" )都做爲此類的實例實現。

      在Java中只要使用雙引號引用起來的任何數據它們都是String 的一個對象。

        

      字符串是常量;它們的值在建立以後不能更改。由於 String 對象是不可變的,因此能夠共享。

      雖然使用雙引號引用起來的數據都是字符串,也是String的一個實例對象,可是這個對象中的字符數據必定寫完,就已是一個固定的數據,不能再進行修改,而且它存儲在方法區的字符串常量池中。

      

      

    3.String類構造方法     

    String類中提供了大量的構造方法,均可以將不一樣形式的數據轉成字符串對象。

    

 

1 /*
 2  * 演示String類的構造方法
 3  */
 4 public class StringConstructorDemo {
 5     public static void main(String[] args) {
 6         
 7         method5();
 8     }
 9     /*
10      * 面試題
11      */
12     public static void method5() {
13         
14         String s = "abc";
15         String s2 = new String("abc");
16         /*
17          * s 和 s2 的區別?
18          * s它指向的方法區中的常量池中的 abc字符串
19          * s2它指向的是堆中的本身new的那個對象,而在堆中這個對象中維護的地址
20          * 指向的常量池中的abc字符串
21          * 
22          * String s = "abc"; 在內存中只有一個對象
23          * String s2 = new String("abc"); 在內存中有2個對象
24          */
25         System.out.println(s);
26         System.out.println(s2);
27         System.out.println(s == s2);
28     }
29     /*
30      * 演示將int類型的數組轉成字符串
31      */
32     public static void method4() {
33         
34         int[] arr = {23456,23457,23458};
35         String s = new String(arr , 0 , 3);
36         System.out.println(s);
37     }
38     /*
39      * String(byte[] bytes, int offset, int length) 
40      *   byte[] bytes : 指定須要被轉成字符串的那個字節數組
41      *   int offset : 從字節數組的那個下標開始轉數據
42      *   int length : 須要將從offset開始日後共計轉多少數據
43      */
44     public static void method3() {
45         
46         byte[] b = {97,98,99,100,65,49};
47         
48         String s = new String( b , 4 ,4 );
49         System.out.println(s);
50     }
51     /*
52      * 演示String類中的有參數的構造方法
53      */
54     public static void method2() {
55         
56         //建立字節數組
57         byte[] b = {97,98,99,100,65,49};
58         
59         //將字節數組中的全部數據轉成字符串
60         String s = new String( b );
61         
62         System.out.println(s); 
63     }
64     /*
65      *  演示空參數的構造方法
66      *  String() 
67      */
68     public static void method1() {
69         
70         /*
71          * 使用String類的構造方法獲得String對象
72          * 使用空參數的構造方法建立出的String對象,這個對象在堆中
73          * 而這個字符串對象中沒有任何字符數據
74          */
75         String s = new String();
76         
77     }
78 }

 

    4. String 類經常使用方法     

      a. 拼接字符串

               猜想到某個功能以後,繼續猜想它的方法參數以及返回值類型

               參數:有,至少2個。實際值須要一個參數

               返回值類型:String , 拼接後的新的字符串

      

      

      b.根據字符找下標

      

      

      

      

    c.根據下標找字符

      

    d.字符串的長度

      

      

      e. 獲取字符串中的一段子串

        

     

 

1 /*
 2  * 演示String類中的截取方法
 3  */
 4 public class StringMethodDemo2 {
 5     public static void main(String[] args) {
 6         
 7         String s = "好好學習,每天向上";
 8         /*
 9          *  substring(int beginIndex) 
10          *      從指定的字符串中的beginIndex位置開始截取子串,一直到結束
11          *  substring( int beginIndex , int endIndex )
12          *      從指定的字符串中的beginIndex位置開始到endIndex結束(不包含endIndex位置上的字符)
13          */
14         String ss = s.substring(2);
15         System.out.println(ss);
16         String ss2 = s.substring(0, 5);
17         System.out.println(ss2);
18     }
19 }

 

    f. 字符串轉數組

      

      

      

 

1 //字符串轉成字節數組
 2     public static void method2() {
 3         String s = "abdefg";
 4         //轉字節數組
 5         byte[] bs = s.getBytes();
 6         
 7         for (int i = 0; i < bs.length; i++) {
 8             System.out.println(bs[i]);
 9         }
10     }
11     //字符串轉字符數組
12     public static void method1() {
13         String s = "abcefg";
14         //轉字符數組
15         char[] cs = s.toCharArray();
16         for (int i = 0; i < cs.length; i++) {
17             System.out.println(cs[i]);
18         }
19     }

 

    g. 其餘判斷方法

    

    

         判斷指定的字符串是否在調用contains方法的那個字符串中。

         String s =」abcdefg」;

         String s2 = 「abc」;

         boolean b = s.contains(s2); 

         判斷s2 這個字符串在s字符串中是否存在。

    

    

判斷字符串是否以指定的字符串結尾。

         String s = 「abc.java」;

         boolean b = s.endsWith(「.java」);

    

   h.其餘的轉換方法

             將字符串中的全部字母轉成小寫

    

      將字符串中的全部字母轉成大寫

    

         valueOf方法是將其餘類型的數據轉成字符串。

  5.String類方法練習

    a。對字符串中的數據進行排序    

 

1 /*
 2  * 需求:對字符串中的數據進行排序
 3  * 
 4  * 分析:
 5  *       須要一個字符串,將字符串轉成字符數組。
 6  *      對數組遍歷選擇排序
 7  *  將數組轉成字符串
 8  */
 9 public class StringTest2 {
10     public static void main(String[] args) {
11         String s ="aAZzBcDfPO";
12         String sortedStr = stringSort(s);
13         System.out.println(sortedStr);
14     }
15     //對指定的字符串進行排序
16     public static String stringSort(String s) {
17         
18         //將字符串轉成數組
19         char[] cs = s.toCharArray();
20         //使用選擇排序
21         for( int i = 0 ; i < cs.length - 1 ; i++  ){
22             //外循環是提供數組中須要和後面比較的那個元素的下標
23             for( int j = i + 1 ; j < cs.length ; j++  ){
24                 //內循環是提供當前外環線下標後面剩餘全部空間的下標
25                 //判斷
26                 if( cs[i] > cs[j] ){
27                     char temp = cs[i];
28                     cs[i] = cs[j];
29                     cs[j] = temp;
30                 }
31             }
32         }
33         //將數組轉成字符串
34         String ss = new String(cs);
35         return ss;
36     }
37 }

 

 

     b.統計指定字符在字符串中出現的次數

 

 

1 /*
 2  * 需求:統計指定字符在字符串中出現的次數
 3  * 分析:
 4  *      須要取出字符串中的每一個字符,和須要統計次數的那個字符進行比較,
 5  *     若是相同,就讓計數器+1,若是不相同,繼續取出下一個字符,以此類推。
 6  *     將字符串中的所有字符遍歷完成,指定的字符個數就統一在計數器中。
 7  */
 8 public class StringTest {
 9     public static void main(String[] args) {
10         
11         String s = "asjdklafjklew4uiowrafn,dsfaksda";
12         char ch = 'z';
13         //須要計數器
14         int count = 0;
15         //使用循環遍歷字符串
16         for( int i = 0 ; i < s.length() ; i++ ){
17             //取出每一個字符數據和須要統計的字符判斷
18             char c = s.charAt(i);
19             if( c == ch ){
20                 count++;
21             }
22         }
23         System.out.println(ch+"的次數是:"+count);
24     }
25 }

 

     c.對字符串按照指定的內容切割,而後排序

 

1 /*
 2  * 需求:對字符串按照指定的內容切割,而後排序
 3  * 
 4  * 分析:
 5  *       必須有一個字符串。"abs Adsfj sldjk fljs dlkf"
 6  *      使用空格對字符串進行切割:
 7  *         "abs" "Adsfj" "sldjk" "fljs" "dlkf"
 8  *  切割以後,會獲得多個字符串數據,須要對這些字符串進行排序。
 9  *      在Java中對字符串進行比較,有本身特定的規則:
10  *      
11  *      選擇2個字符串,使用它們相同下標位置上的字符對應的數字進行比較,
12  *      誰的數字大,這個字符串就大。
13  *      
14  *      在String類中提供的compareTo的方法,能夠對2個字符串進行大小的比較
15  */
16 public class StringTest3 {
17     public static void main(String[] args) {
18         
19         String s = "abs Adsfj sldjk fljs alkf";
20         
21         //切割
22         String[] strs = s.split(" ");
23         
24         //排序
25         //Arrays.sort(strs);
26         for( int i = 0 ; i < strs.length - 1 ; i++ ){
27             for( int j = i + 1 ; j < strs.length ; j++ ){
28                 if( strs[i].compareTo(strs[j]) > 0 ){
29                     String temp = strs[i];
30                     strs[i] = strs[j];
31                     strs[j] = temp;
32                 }
33             }
34         }
35         //將String數組轉成字符串
36         //String ss = Arrays.toString(strs);
37         String ss = "";
38         for (int i = 0; i < strs.length; i++) {
39             ss = ss + strs[i] + " ";
40         }
41         System.out.println(ss);
42     }
43 }

 

 二·、字符串緩衝區

   1. 符串緩衝區介紹

      a. 緩衝區思想:     

      舉例:超市的購物車。在購買商品的過程當中,將須要夠買的商品先臨時存儲在購物車中。這時的購物車就至關於一個容器,給其中添加須要購買的物品。

      這裏說的這個容器在Java中被稱爲緩衝區。

      Java中也有緩衝區存在。主要是臨時存儲一些須要處理的數據,在處理完以後獲得一個惟一的結果。

       b. 字符串緩衝區

      字符串緩衝區:能夠存儲字符數據的容器,能夠對這個容器中的字符數據進行各類的操做,在操做完成以後,會獲得一個惟一的字符串常量,最後把這個字符串常量保存到方法區的常量池中。

      若是在操做的過程當中,沒有操做完成,那麼不會在常量池中保存任何數據。

       c.緩衝區常見的操做    

      緩衝區自己就是一個容器:

               它們都具有 增 刪  改 查操做。

               增:給容器中添加數據

               刪:從容器中刪除數據

               改:修改容器中的數據

               查:查看容器中的數據

      增刪改查:CRUD。

               Create  Read  Update  Delete

         Java中針對字符串這類數據提供兩個緩衝區對象:

                StringBuffer

              StringBuilder

   2.  StringBuffer介紹

        

  線程安全的可變字符序列。一個相似於 String 的字符串緩衝區,但不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但經過某些方法調用能夠改變該序列的長度和內容。

       StringBuffer :它是字符串緩衝區,支持對其中保存的數據進行增刪改查操做。

       StringBuffer中定義的方法是爲增刪改查設計的。

   

    

    3. StringBuffer中的方法介紹

       a. 添加方法

        

         

        b.刪除方法

        

        

 

1 //刪除方法
 2     public static void method3() {
 3         //建立字符串 緩衝區對象
 4         StringBuffer sb = new StringBuffer("abcdefg");
 5         
 6         /*
 7          * 刪除方法
 8          * delete(int start , int end)
 9          *     start是起始位置
10          *     end 結束位置
11          *  要求start必定要小於等於end
12          */
13         sb.delete(3, 3);
14         
15         //刪除指定位置上的字符
16         sb.deleteCharAt(3);
17         
18         //將容器中的數據轉成字符串
19         String s = sb.toString();
20         
21         System.out.println(s);
22     }

 

        c. 修改方法

        

        

 

1 //修改方法
 2     public static void method4() {
 3         //建立字符串 緩衝區對象
 4         StringBuffer sb = new StringBuffer("abcdefg");
 5         
 6         //修改方法
 7         sb.setCharAt(3, 'A');
 8         
 9         //將容器中的數據轉成字符串
10         String s = sb.toString();
11         
12         System.out.println(s);        
13     }

 

      d.獲取方法   

capacity()  獲取字符串緩衝區的容量  例如:水杯500ML 

length()    獲取到的是字符串中的字符個數   例如:水杯中實際裝的水的容量

charAt(int index)  獲取字符串緩衝區容器中指定位置上的字符數據

indexOf(String str)

indexOf(String str, int fromIndex)

lastIndexOf(String str)

lastIndexOf(String str, int fromIndex)

reverse()  反轉字符串緩衝區中的字符

    e.StringBuffer的使用場景    

若是程序中須要對字符串中的字符數據進行  CRUD 的時候,建議先將這個字符串存儲到緩衝區中,而後對其進行操做,操做完成以後再從新轉成字符串數據。

  4.StringBuilder介紹 

StringBuilder類它是JDK5新增的。它的功能和StringBuffer一致。

區別:

         StringBuffer 它在操做容器的時候,增  刪  改  查 的過程當中,不會發生不安全的問題。

         StringBuilder  它也提供的對容器的增刪改查操做,可是不保證安全。

                   在使用StringBuilder的時候,運行多個操做同時對容器進行。因爲它不保證安全,所以它在操做的時候效率比StringBuffer高。

面試題:StringBuffer和StringBuilder的區別:

         StringBuffer 安全的。StringBuilder 不安全。

相關文章
相關標籤/搜索