第一節、String對象 一、 Java中將字串作為String類型對象來處理。當建立一個String對象時,被建立的字串是不能被改變的。每次需要改變字串時都要建立一個新的String對象來儲存新的內容。原始的字串不變。之所以採用這種方法是因為實現固定的,不可變的字串比實現可變的字串更高效。對於那些想得到改變的字串的情況,有一個叫做StringBuffer的String類的友類,它的對象包含了在建立之後可以改變的字串。 String類和StringBuffer類都在java.lang中定義。因此它們可以自動的被所有程式使用。兩者均被說明為final,這意味著兩者均不含子類。 二、String建構函式 (1)String(), 預設建構函式,無參數 String s1 = new String(); (2)String( char chars[]) ,傳入字元數組 char[] myChars={'a', 'b', 'c'}; String s2 = new String(myChars) // 使用字串“abc”初始化s2 (3)String( char chars[], int startIndex, int numChars) ,傳入一個字元數組,從指定下標位置開始擷取指定個數的字元,用這些字元來初始化字串變數。 char[] myChars={'h', 'e', 'l', 'l', 'o'}; String s3 = new String(myChars,1,3); //使用字串“ell”初始化s3 (4)String(String strObj),傳入另一個字串對象,用該字串對象的內容初始化 String s4= new String(s3); // 這是s4也是“ell”了。 (5)String(byte asciiChars[]) String(byte asciiChars[], int startIndex, int numChars) 儘管Java的char類型使用16位(bit)表示Unicode編碼字元集,在Internet中,字串的典型格式使用由ASCII字元集構成的8位元組,因為8位ASCII字串是共同的,當給定一個位元組(byte)數組時,String類提供了上面兩個初始化字串的建構函式。例子:package Examples;class SubStringConv{ public static void main(String[] args){ byte ascii[]={65,66,67,68,69,70}; String s1=new String(ascii); System.out.println(s1); String s2=new String(ascii,2,3); System.out.println(s2); }}編譯和運行後輸出:ABCDEFCDE 三、 (1)調用字串的length()方法可以得到該字串的長度(字元個數); (2)前面說明了如何使用new運算子建立一個字串執行個體。然而這是一種早期的使用字串常量的處理方法。對於程式中的每一個字串常量,Java會自動建立String對象。因此,可以使用字串常量初始化String對象。例如: String s5="abc"; int i = "abc".length(); //可以將字串作為對象來進行操作 (3)可以使用“+”運算子來將兩個字串串連起來產生一個新的String對象。只要+運算子有一個運算數是字串(String)執行個體時,編譯器就將另一個運算數轉換為它的字串形式。這種操作是通過調用一個由String類定義的 字串轉換方法valueOf()來完成的。對於簡單類型,valueOf()方法返回一個字串,該字串包含了該類型的值的字串。對於對象,valueOf()方法調用toString()方法。每一個類都執行toString()方法,因為它是由Object定義的。toString()方法具有如下一般形式: String toString() 。 toString()方法返回一個String對象(即字串)。該對象一般是對類的一個描述。 四、一些字串操作 (1)字元截取 *char charAt(int where) ,注意,這裡返回一個char字元例如: char a ; a="abcde".charAt(2); //將索引為2 ,即第三個字元賦給a * void getChars(int sourceStart, int sourceEnd, char target[], int targetStart) ,這裡是無傳回值方法,指定要截取的子字串的開始和結束下標,再指定要儲存子字串內字元的數組,和存放這些字元的起始位置。注意,子字串並不包括位於結束下標的字元。 * byte[] getBytes() 這是getBytes()方法最簡單的形式,它實現將字元存放於位元組數組中。在將字串(String)值輸出到一個不支援16位Unicode編碼的環境時,getBytes()是最有用的。例如,大多數Internet協議和文字檔格式在文本交換時使用8位ASCII編碼。 * char[] toCharArray() 將字串中所有的字元轉換到一個字元數組的最簡當方法,也可以使用getChars()方法實現。 (2)字串比較 * boolean equals(Object str) 比較兩個字串對象是否相等, boolean equalsIgnoreCaseJ(String str) 比較兩個字串對象,且忽略字元的大小寫 * regionMatches() 方法允許將一個字串中指定的區間和另一字串中指定的區間進行比較,它的重載形式允許在比較時忽略大小寫。下面給出這兩種方法的一般形式: boolean regionMatches(int startIndex,String str2,int str2StartIndex,int numChars)boolean regionMatches(boolean ignoreCase ,int startIndex,String str2,int str2StartIndex,int numChars) 其中startIndex指定調用此方法的字串內子字串的起始位置。* boolean startsWith(String str) startsWith方法還有第二種形式: boolean startWith(String str, int startIndex) boolean endsWith(String str) 上面的方法用來判斷一個給定的字串是否是從指定的字串開始或結束。* int compareTo(String str) 方法用於比較兩個字串的大小。字串比較的結果及其含義:
值 |
含義 |
小於0 |
調用此方法的字串小於參數str |
大於0 |
調用此方法的字串大於參數str |
等於0 |
兩個字串相等 |
(3)其他動作* 搜尋字串:int indexOf( int ch)int lastIndexOf( int ch)int indexOf(String str)int lastIndexOf(String str)指定搜尋的起始點:int indexOf( int ch, int startIndex)int lastIndexOf( int ch ,int startIndex)int indexOf(String str ,int startIndex)int lastIndexOf(String str, int startIndex) * 使用 substring()截取子字串: String substring(int startIndex) 注意substring中string沒有大寫,截取指定位置後的子字串。 String substring(int startIndex,int endIndex) 截取指定起始位置和結束位置的子字串。注意截取的字字串不包括結束位置的字元。 * concat() 串連連個字串,與+ 運算子執行相同功能。 String concat(String str) * replace() 用另一個字元取代指定字串中指定字元:String replace(char original, char replacement) 例如: String s=”Hello”.replace(‘l’,’w’); //執行後 s =”Hewwo”; * trim() 返回一個字串,該字串是刪除調用字串前後的空白符所得的字串 * 改變字串內字元的大小寫 String toLowerCase() 返回一個所有字母都是小寫字串 String toUpperCase()返回一個所有字母都是大寫的字串 * 使用 valueOf()方法實現資料轉換 例如: String str = String.valueOf(3) ; //將int類型轉換成字串類型,其他基礎資料型別 (Elementary Data Type)和任何類的對象也可作為參數。 第二節、StringBufferStringBuffer定義了下面三個建構函式: StringBuffer() // 預設建構函式,預留了16個字元的空間,該空間不需再分配 StringBuffer(int size) // 設定指定緩衝區大小StringBuffer(String str) // 設定StringBuffer對象初始化的內容並預留16個字元空間,且不需再分配空間* int length() 調用length()方法可以得到StringBuffer對象的長度,調用capacity()可以得到總的分配容量。兩個方法都是返回一個int類型的值。 * void ensureCapacity(int capacity)如果想在構造StringBuffer對象後為某些字元預分配空間,可以使用ensureCapacity()方法,設定緩衝區的大小,這在事先已知要在StringBuffer上追加大量小字串的情況下是有用的。ensureCapcity()方法具有如下的一般形式: void ensureCapacity(int capacity)* void setLength(int len)使用setLength()方法可以設定StringBuffer對象的長度,它的一般形式如下:void setLength(int len) 如果len大於StringBuffer對象當前的length()值的話,那麼會在StringBuffer對象後面加上Null 字元;如果比length()小的話,則len後面的字串會丟失。 * char charAt(int where) void setCharAt(int where, char ch) 使用charAt()方法可以得到StringBuffer對象中指定位置上的字元,setCharAt() 可以設定指定位置上的字元。它們的一般形式如下: char charAt(int where) void setCharAt(int where,char ch) 對於這兩種法法,where值必須是非負的,同時不能超過或等於StringBuffer對象的長度。* getChars(int suorceStart,int sourceEnd,char target[] , int targetStart)* append() Append()方法將任一其他類型資料的字串形式串連到調用StringBuffer對象的後面,對所有內建的類型和Object,它都有重載形式。下面是幾種形式:StringBuffer append(String str)StringBuffer append(int num)StringBuffer append(Object obj) * insert() Insert()方法將一個字串插入另一個字串中。下面是它的幾種形式: StringBuffer insert(int index,String str) StringBuffer insert(int index,char ch) StringBuffer insert(int index,Object obj) *reverse() // StringBuffer reverse() StringBuffer strbf=new StringBuffer(“ABCDEFG”); strbf.reverse(); System.out.println(strbf); //輸出 GFEDCBA * StringBuffer delete(int startIndex,int endIndex) StringBuffer deleteCharAt(int loc) 刪除指定位置的字串和指定位置的字元。例如刪除第一個字元後的所有字元: strbf.delete(1,strbf.length()); * replace() 它完成在StringBuffer內部用一個字串代替另一個指定起始位置和結束位置的字串的功能,注意的是,被代替的字元不包括結束位置上的字元,它的一般形式是,: StringBuffer replace(int startIndex, int endIndex,String str) * substring() 返回StringBuffer的一部分值 String substring(int startIndex) String substring(int startIndex, int endIndex)