1. 程式人生 > >JavaAPI學習(一):API && String類 && Stringbuffer && StringBuilder

JavaAPI學習(一):API && String類 && Stringbuffer && StringBuilder

vax 編碼 長度 split() 無敵 esp ogr charat() ble

一、API

  1、API:英文 Aplication Progrmmer Iteface 的縮寫,即應用編程接口

    由官方或第三方提供的能實現特點功能的程序封裝包,包含各功能類,接口,以及實現方法等;很多基礎功能不需要再重寫,直接調用即可;但因為Java的API十分豐富,常用的基礎API就有很多,也需要花時間熟悉這些API的功能和使用方法;

  2、常用API

   String類, StringBuffer, StringBuilder ,集合(list set map) ,包裝類,日歷日期,IO流 ,異常 ,線程等;

二、String類

  2.1String類

  1、String類:

Java 程序中的所有字符串字面值(如 "abc" ) 都作為此類的實例實現。即之前用到的所有的字符串引用類型數據;

    即:String t = "HelloJava"; 其中"HelloJava"即為一個對象;      

  2、位置:java.lang.String;lang包為系統默認的導包,直接調用不用導包;

  3、String 類代表字符串。

   字符串是常量,它們的值在創建之後不能更改。字符串緩沖區才支持可變的字符串。因為 String 對象是不可變的,所以可以共享;

 1 String s1 = "HelloWorld";
 2 String s2 = "HelloWorld";
3 String s3 = "Hello" + "World"; 4 String s4 = "Hello" ; 5 String s5 = "World"; 6 String s6 = s4 + s5; //生成新的對象,創建新地址 7 System.out.println(s1 == s2); //直接量 true 8 System.out.println(s1 == s3); //直接量 true 9 System.out.println(s1 == s6); //間接量 false 10 11 String s7 = new String("HelloWorld");
12 System.out.println(s1 == s7); //間接量 false


思考題

  String s7 = new String("HelloWorld"); 這句話創建了幾個對象?
    兩個;new一個,"HelloWorld"本身就是個對象。

備註:

  如果字符串創建的對象的時候是直接量賦值,那麽會將該對象放到常量池 中去,如果下次再有相同的直接量賦值,此時會先從常量池遍歷是否有該常量 存在,有則直接將該引用指向目標地址值,沒有則會重新創建新的地址值,並 將其放入常量池;(同之前的常量以及數值型基本數據一樣理解)。

2.2 String類中常見的一些方法(BJ)

1.charAt(int index);返回指定位置的字符

練習:

檢查一句話是否為回文?

回文:上海自來水來自海上

參考代碼:StringDemo.java

2.concat(String str);

  將指定字符串拼接到字符串末尾;

3.contains(String str);

  查看是否有指定的字符序列,有返回true,否則返回false

4.startsWith(String str,int i);

  判斷指定字符串是否在字符串的起始/具體位置/結束;返回布爾值;

5.endsWith(String str);

  判斷指定字符串是否在字符串的結束;返回布爾值;

6.subString(int sta,int end);

  返回字符串指定範圍內(前包括,後不包括)的字符串;

7.toCharArray();

  將指定字符串轉為字符數組

8.toLowerCase();

  將所有的字母全部轉為小寫

9.toUpperCase();

  將所有的字母全部轉為大寫

10.trim();

  去除字符串兩邊空白(中間的不能去除)

11.valueOf(obj);

  將數組\對象\基本數據類型轉為字符串類型

12.getBytes();

  使用平臺默認的編碼字符集獲取字符串的字節序列,

將結果存入到字節數組中去

平臺默認的編碼字符集:

Windows GBK:中文占2個字節,英文占1個字節

Linux/IOS UTF-8:中文占3個字節,英文占1個字節

UNICODE字符集:中英文各占2個字節,最後單獨加2個字節進行相應的排序

13.indexOf(String str, int i);

  返回指定字符str從第i個起在原字符串中第一次出現的位置

14.lastIndexOf(String str);

  返回指定字符在原字符串中最後一次出現的位置

15.length();

  返回字符串的長度

備註:區別length屬性和length()方法

獲取數組的長度用length屬性,獲取字符串長度用length()方法

16.replace();

  用指定字符串替換原字符串中的部分內容(常用來替換敏感詞匯) ,支持正則表達式(見下一章);

17.split();

  根據指定的條件進行分割,結果返回為字符串數組,支持正則表達式(見下一章);

  綜合測試代碼:StringDemo.java 

  內容較多,寫得較亂,僅供參考,建議自測;

技術分享圖片
  1 package API;
  2 
  3 import java.util.Arrays;
  4 
  5 import javax.swing.table.TableStringConverter;
  6 
  7 import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper;
  8 
  9 //import org.junit.Test;
 10 
 11 /**
 12  * @項目名稱:APIDay01
 13  * @模塊功能:測試String類的各個函數功能
 14  * @模塊版本:
 15  * @JDKVersions:JDK 8.0
 16  * @author:  Kanekiyi
 17  */
 18 public class StringDemo {
 19     //@Test
 20     public static void test1() {
 21         /**判斷句子是否為回文**/
 22         String string = "上海自來水來自海上";
 23         int times=0;
 24         boolean flag = true  ;
 25         for (int i = 0; i<string.length()/2;i++) {
 26             if (string.charAt(i)!=string.charAt( string.length()-i-1) ) {
 27                 System.out.println(string+",這句話不是回文");
 28                 flag = false ;
 29                 break;
 30             }
 31             if (true) {
 32                 System.out.println(string+",這句話是回文");
 33                 break;
 34             }
 35         } 
 36         
 37         //找到字符串中的某個位置的字符
 38         char  c =  string.charAt(5);
 39         System.out.println("charAT()函數測試"+c);
 40     }
 41     
 42     public static void test2() {
 43         String string = "java很吊";
 44         
 45         /**字符串的拼接*/
 46         String string2 = string.concat(",PHP最好");     
 47         System.out.println("string2:"+string2);
 48         
 49         /**判斷字符串是否在字符串的起始/具體位置/結束,在返回true
 50         boolean b1 = string.startsWith("java");
 51         boolean b2 = string.startsWith("吊",5);
 52         boolean b3 = string2.endsWith("吊");
 53         System.out.println();
 54         System.out.println("starts/endsWith測試");
 55         System.out.println(b1);
 56         System.out.println(b2);
 57         System.out.println(b3);
 58 
 59         /**截取字符串的某一段作為新的字符串*/
 60         String string3 = string2.substring(7);
 61         System.out.println("string3:"+string3);
 62             //前包括,後不包括
 63         String string4 = string2.substring(7,9);        
 64         System.out.println("string4:"+string4);
 65         
 66         /***將字符串轉換為字符數組***/
 67         char[] chras= string2.toCharArray();
 68         System.out.println("chras:"+Arrays.toString(chras));
 69         
 70         /***將字符串進行大小寫互換***/
 71         String string5 = "CHINA";
 72         String string6 = string5.toLowerCase();
 73         System.out.println("string6:"+string6);
 74         String string7 = string6.toUpperCase();
 75         System.out.println("string7:"+string7);
 76         
 77         /***將字符串首位空格去除變成新的數組***/
 78         String string8 = "      1832668989       ";
 79         String string9 = string8.trim();
 80         System.out.println("string9:"+string9);
 81         
 82         /***將其它類型數據(基礎類型、引用)轉換為字符串***/
 83         int i4=57895;
 84         String string10 = String.valueOf(i4);
 85         System.out.println("string10:"+string10);
 86 
 87         GusseZiMu gusseZiMu  = new GusseZiMu();
 88         String string11 = String.valueOf(gusseZiMu);
 89         System.out.println("string11:"+string11);
 90         
 91         boolean b4 = false;
 92         String string12 = String.valueOf(b4);
 93         System.out.println("string12:"+string12);
 94         
 95         /***將字符串的(與平臺的編碼格式有關)
 96           ,轉換為byte型的數組***/
 97         String string13 = "我愛Java";
 98         byte[] by1 = string13.getBytes();
 99         System.out.println("字節長度:"+by1.length);        
100         //字節長度與平臺編碼格式有關,Unicode編碼漢字占兩個字節,英文占一個字節
101         System.out.println(Arrays.toString(by1));
102         
103         /***返回指定字符在字符串中出現的位置***/
104         String string14 = "1234d157a809a4525a1323";
105         //出現的第一次位置
106         int  index1 = string14.indexOf("a");
107         System.out.println("index1:"+index1);
108         //從第九個開始找出現的位置
109         int  index2 = string14.indexOf("a",9);
110         System.out.println("index2:"+index2);
111         //出現的最後的位置
112         int  index3 = string14.lastIndexOf("a");
113         System.out.println("index3:"+index3);
114         
115         /**返回 字符串的長度
116          * 數組的長度是通過獲取其屬性,字符串是通過方法獲取
117          * 
118          * ****/
119         int strLength = string14.length();            
120         System.out.println("strLength:"+strLength);
121         
122         /***字符中的字符替換***/
123         String string15 = "魯班七號最肉";
124         String string16 = string15.replace(‘肉‘, ‘脆‘);
125         System.out.println("string16:"+string16);
126         String string17 = string15.replaceAll(" 5|肉", "脆");
127         System.out.println("string17:"+string17);
128         
129         /***字符中的字符替換***/
130         String string18 = "灰化肥,發黑,會揮發";
131         String[] string19 = string18.split(",");
132         System.out.println("string19:"+string19);
133 
134     }
135     
136     public static void test3() {
137         /***判斷字符串是否包含某個字符***/
138         String string = "java很吊";
139         boolean  c =  string.contains("吊");
140         System.out.println(c);
141     }
142     public static void main(String[] args) {
143          test1();
144          test3();
145          test2();
146   
147     }
148 }
View Code

2.3第三方包

以上內容是java官方提供的API,也需要了解第三方jar包以及對自己封裝的包進行操作。 第三方j常用的是commons-lang3-3.1.jar

常用類:StringUtil類,測試方法如下

1、deleteWhitespace(String string); 刪除字符串中所有空格;
2、StringUtils.left(String string, int i); 返回字符串指定範圍的字符串;

   測試代碼:    

技術分享圖片
 1 /**
 2  * 
 3  */
 4 package API;
 5 
 6 import org.apache.commons.lang3.StringUtils;
 7 
 8 /**
 9  * @項目名稱:APIDay01
10  * @模塊功能:測試第三方
11  * @模塊版本:
12  * @JDKVersions:JDK 8.0
13  * @author:  Kanekiyi
14  */
15 public class StingUtilDemo {
16     
17     public static void main(String[] args) {
18         String string= "  我 哎    你   安家費   hhh  加法     ";
19         System.out.println(string);
20         // 刪除字符串中所有空格
21         String string2 = StringUtils.deleteWhitespace(string);
22         System.out.println(string2);
23         
24         // 左起截取指定長度字符串
25         String str3=StringUtils.left(string2, 5);
26         System.out.println(str3);
27     }
28     
29 }
View Code

五、StringBuffer和StringBuilder

2.1、StringBuffer類和StringBuilder類

 1、優點:String類頻繁的修改內容就會頻繁的創建對象,對資源的開銷較大此時能夠解決該問題,引入StringBuffer類和StringBuilder頻繁的修改String中的內容不會創建新的對象;

 2、比較:

StringBuffer:線程安全 安全性高,效率低

StringBuilder:線程不安全 安全性低,效率高

2.2兩個類中常見的方法

1.append(String str);在字符串末尾追加字符串

2.insert(int i, String str);在指定位置插入字符串

測試代碼:

技術分享圖片
 1 package API;
 2 
 3 /**
 4  * @項目名稱:APIDay01
 5  * @模塊功能:
 6  * @模塊版本:
 7  * @JDKVersions:JDK 8.0
 8  * @author:  Kanekiyi
 9  */
10 public class StringBufferDemo {
11     public static void main(String[] args) {
12         StringBuffer  stringBuffer = new StringBuffer();
13         // 字符串末尾添加字符串
14         stringBuffer.append("魯班七號天下無敵");
15         System.out.println(stringBuffer);
16         // 指定位置插入字符串
17         stringBuffer.insert(4, ",");
18         System.out.println(stringBuffer);
19         
20     }
21 
22 }
View Code

有錯誤內容或不足之處望指正!!!

JavaAPI學習(一):API && String類 && Stringbuffer && StringBuilder