String類

第四章:String類


String類
用於描述字符串事物。學習重點:特性(不改變)和使用方法。
API就是java對外提供的應用程序接口的說明,例如,Thread類、Runnable接口、String類等。可以使用目標方法的結果的類型,來查找目標方法。
    字符串是一個特殊的對象。很多語言都有對字符串的描述和功能的提供。被final修飾,意味不能有子類,且內容一旦確定,不能更改。
    構造方法很多,例如,String s = new String(“abc”);String s1 = “abc”;構造內容一樣,後者更常用。s1是一個類類型變量,”abc”纔是對象。不一定非要有new纔是對象。只要是雙引號內的內容,都是String類的對象。
    字符串最大的特點:一旦被初始化,就不能改變(屬性)。變量s1可以變化,指向其他對象,但是對象”abc”不會變化。字符串不像其他對象,可以通過改變屬性來改變對象自身。
    String類複寫了Object類中的equals方法,該方法用於判斷字符串內容是否相同,而不是以前的內存地址值是否一致。對象可以不相同,但內容可以相同。
String s1 = "abc";和String s2 = new String("abc");的對比。s1在內存中有一個對象;s2在內存中有兩個對象,new和”abc”都是對象。
內存中有常量池,裏面有各種字符,字符串通過組合字符並將其放到數組中來構建對象。例如,String s1 = "abc"; 和String s3 = "abc";,s1等於s3,都指向同一個對象。”abc”創建後,s3不會再獨立開闢空間,避免浪費,而是直接指向已有的對象。方法區內存有,靜態成員、方法和常量池。
字符串特點:1. 是個對象。2. 常量,不能被改變。3. s1和s2的區別。4. 字符串的比較——equals方法。
   
    常見功能
    必須熟練到不用查閱API文檔,依然可以應用自如。
    String類用於描述字符串事物,提供了多個方法用於對字符串進行操作。
    1. 獲取
    1.1 字符串中包含的字符數,即長度,
int length();這是方法,不是屬性,需要加括號。不同於數組。
    1.2 根據位置獲取某個字符。
char charAt(int index);類似數組排列。索引從0開始。當訪問到字符串中不存在的角標時,會出現字符串角標異常。
    1.3 根據字符獲取該字符的位置。
int indexOf(int ch);返回的是ch在字符串中第一次出現的位置。如果沒有找到,返回-1。
int indexOf(int ch, int fromIndex);從fromIndex指定位置開始,獲取字符ch在字符串中的位置,依然是正常位置。
int lastIndexOf(int ch);反向索引,返回最後一次出現的位置。
int indexOf(String str);返回的是str在字符串中第一次出現的位置。
int indexOf(String str, int fromIndex);從fromIndex指定位置開始,獲取字符串str在字符串中的位置。
int lastIndexOf(String str);反向索引,返回最後一次出現的位置。
 
    2. 判斷
    2.1 字符串中是否包含某個子串。
        boolean contains(String str);
        另類寫法:indexOf(String str);索引str第一次出現的位置,返回-1表示沒有改字符串,所以也可以用於判斷指定字符串是否包含,只要不等於-1就是包含。該方法既可以判斷,由可以獲取出現的位置。
    2.2 字符串中是否有內容。
        boolean isEmpty(String str);原理就是判斷長度是否爲0。” ”和null不同,前者是對象,後者指向爲空。
    2.3 字符串是否是以指定內容開頭。
        boolean startsWith(String str);
    2.4 字符串是否是以指定內容結尾。
        boolean endsWith(String str);
    2.5 判斷字符串的內容是否相同。
        boolean equals(String str);複寫了Object類中的方法。
    2.6 判斷內容是否相同並忽略大小寫。用於錄入用戶名時忽略大小寫。全部變成小寫再比較。
        boolean equalsIngoreCase(String str);
 
    3. 轉換
    3.1 將字符數組轉成字符串。
        構造函數:String(char[] ch)將整個字符數組轉換成字符串。
                  String(char[] ch, int offset, int count)將字符數組中的一部分轉成字符串。offset爲起始角標,count爲字符個數。
 
        靜態方法:static String copyValueOf(char[] ch);必須由字符串類或對象調用,例如,s1 = String.copyValueOf(arr);。
                  static String copyValueOf(char[] ch, int offset, int count);字符數組部分轉換成字符串。
                  static String ValueOf(char ch); 單個字符轉換成字符串。
 
    3.2 將字符串轉成字符數組。
        char toCharArray();操作對象自身,所以沒有參數。
       
    3.3 將字節數組轉成字符串。
        構造函數:String(byte[] ch)每個整數對應字符,將字符連接成字符串。整數範圍在byte內。
                  String(byte[] ch, int offset, int count)將字節數組中的一部分轉成字符串。
 
    3.4 將字符串轉成字節數組。
        byte[] getBytes();
 
    3.5 將基本數據類型(單個)轉換成字符串。
        static String valueOf(int a);例如,3+” ”相當於String.valueOf(3);後者比較專業,但比較麻煩;一般常用前者。類似於’a’+0,獲得對應整數,類型提升。表達式也可以。
        static String ValueOf(double b);
        特殊:字符串和字節數組在轉換過程中,是可以指定編碼表的。
 
    4. 替換
       String replace(char oldchar, char newchar);注意:因爲字符串初始化後不能改變,替換回產生新的字符串對象;如果指向不變,需要重新賦值,例如,s1=s1.replace('a','x');。再就是所有原有字符全部被替換。如果要替換的字符不存在,依然返還原字符串。
       String replace(String oldString, String newString);替換部分字符串。
 
    5. 切割
       String[] split(regex);參數爲切割標記。切割後形成字符串數組,”.”無法切割。切割符隨意,字母也可以,獲得的是分開的部分,分割符拿不到。
          
    6. 子串,獲取字符串中的一部分
       String substring(int begin)從指定位置開始到結束。如果指定位置不存在,產生字符串角標越界異常。
       String substring(int begin, int end);從指定位置開始到指定位置的前一個結束,包含頭不包含尾,可以理解爲s.substring(0, s.length())。字符位置爲表達式也可以。
      
    7. 轉換、去除空格、比較
    7.1 將字符串轉換成大寫或小寫。
        String toUpperCase();大寫
        String toLowerCase();小寫
    7.2 將字符串兩端的多個空格去除。用於用戶登錄時去掉空格。
        String trim();
    7.3 對兩個字符串進行自然順序的比較。按照字典順序比較,this在編碼表的值減去str在編碼表的值。相同的不需要比較。
        int compareTo(String str);
 
    java中,取某一範圍內的數據,包含頭,不包含尾,這是慣例。因爲尾一般是數組的長度,減一表示最後一個角標。
 
    StringBuffer類
    Buffer意爲,緩衝區。final,不能有子類。
    字符串的組成原理就是通過該類實現的。
    StringBuffer本質是一個容器,類似數組。所以StringBuffer的對象發生改變,依然是原有對象。容器的內容發生改變,不會改變容器本身。例如,StringBuffer sb1 = sb.append(34);,sb和sb1依然是同一個對象。
    特點(使用條件):
1. 長度可以變化。
2. 可以同時操作多種數據類型。
3. 最終通過toString方法變成字符串。
 
    使用:1. 存儲。2. 刪除。3. 獲取。4. 修改。C creat U update R read D delete增刪改查
   
    1. 存儲
    可以存儲各種基本數據類型,但是沒有byte和short,使用時提升。
    StringBuffer append(String s) 將指定的數據作爲參數添加到已有數據的結尾處。返回的是原緩衝區對象。
    方法調用鏈,例如,sb.append("abc").append(true).append(34);//同一個對象,不斷調用方法。
    StringBuffer insert(index,數據),可以將數據插入到指定index位置。但是不能角標越位。
   
    2. 刪除
    StringBuffer delete(int start, int end)刪除緩存區內某一範圍內的數據,包含頭不包含尾。清空緩衝區,sb.delete(0,sb.length());注意,不包含尾。指定位置一樣,不會刪除。例如,sb.delete(2,2);
    StringBuffer deleteCharAt(int index);刪除指定位置的字符。
 
    3. 獲取
     char charAt(int index)
     int indexOf(String str)
     int lastIndexOf(String str)
     int length()
     String substring(int begin)注意返回值是String類型。
 
    4. 修改
     replace(int start, int end, String str)將指定範圍的字符串替換掉。
     void setCharAt(int index, char ch)只替換單個字符。注意,不返回。
    
    5. 反轉
     StringBuffer reverse()反轉,依然返回StringBuffer。
             
    6. 存值
     void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)將緩衝區中的指定數據存儲到指定字符數組中,從指定位置開始。需要保證,提出的字符數不大於字符數組的長度,否則異常。
   
    StringBuilder類
    一個可變的字符序列,與StringBuffer兼容API,作爲StringBuffer的簡易替換。StringBuild不保證同步,StringBuffer保證同步。作爲一個容器,可能會遇到多個線程同時操作數據的情況,同步比較安全,但是要判斷鎖,浪費資源。所以,多線程用StringBuffer,如果用StringBuild,需要自己加鎖(Lock和Condition);單線程用StringBuild,節省資源。簡易使用StringBuild。
    java升級的原則:提高效率;簡化書寫;提高安全性。
   
    基本數據類型對象包裝類
    都可以由字符串或對應的基本數據構造而成。                             
    
     Integer類,已經定義好最大值、最小值。Integer.MAX_VALUE,用於判斷int型數據的範圍,提高安全。equals複寫了方法,比較數值是否相同。
 
     基本數據類型對象包裝類的常見作用:用於基本數據類型和字符串類型之間的轉換。
     1.基本數據類型——》字符串:方法:
1.1 基本數據類型+” ”(類型提升)
1.2 static String valueOf(int x);字符串類的靜態方法
1.3 基本數據類型包裝類.toString(基本數據類型值),靜態方法,返回一個整數的String對象。例如,Integer.toString(34);將34變成字符串。
1.4 String toString()空參數非靜態方法,返回Integer值的String對象,需要和構造函數配套使用。
 
2. 字符串——》基本數據類型:
     應用:文本框中輸入年齡,需要轉換成基本數據類型才能進行判斷。
    
     2.1 靜態轉換方法:
     基本數據類型 變量名 = 基本數據類型包裝類.parse基本數據類型包裝類(String str)
     static int parseInt(String str),也可以轉換成其他類型。必須傳入對應格式的字符串,例如,Integer.parseInt("a123");運行失敗。
     int num = Integer.parseInt("123"); 
boolean b = Boolean.parseBoolean(“true”);
double b = Double.parseDouble(“3.14”);
static char toUpperCase(char ch);直接將字符變成大寫。
 
2.2 對象調用(動態)方法:構造函數+轉換函數
Integer i = new Integer(“123”); int num = i.intValue();利用字符串可以構成對象的特點,將字符串轉換成整數。
        
   十進制轉成其他進制字符串:返回字符串
         toBinaryString();轉二進制
         toOctalString();轉八進制
         toHexString();轉十六進制                                      
   其他進制轉成十進制:
         static int parseInt(String s, int index);第二個參數代表進制,將某個進制的某個字符串轉成十進制的基本數據。例如,Integer.parseInt("110",2);將二進制的110轉成十進制。注意:字符串必須和進制保持一致,不能越位。
 
   JDK1.5版本後出現的新特性
   自動裝箱,可以直接將基本數據類型封裝成對象,例如,Integer x = 4;4是對象,等同於new Integer(4);,隱式運行,簡化書寫。x可以直接運算,例如,x=x+2;x自動拆箱變成整數,與2運算後,把和自動裝箱賦給x。拆箱實質:x.intValue();
    注意,Integer x = null;如果x爲空,不可以調用方法也就不能自動裝箱。需要判斷。
     Integer y = 200; Integer x = 200; y!=x;
     Integer y = 100; Integer x = 100; y==x;。x和y同時指向一個對象。
    當數值在byte範圍內(-128到127),對於新特性,如果該數值已經存在,則不會開闢新空間。
    int compareTo(Integer anotherInteger)比較對象內的數值大小。小於,返回-1;等於,返回0;大於,返回1。


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