Java 程式設計入門 講師 : 陳昭源 CSIE, NTU August 3, 2005
Outline Character & String Exercise August 3, 2005 Page 2
Character & String 處理字元資料時,Java 有三個類別可供使用 Character: 處理單一字元 String: 處理內容不改變 (immutable) 的字串 StringBuffer: 處理內容可能會改變 (mutable) 的字串, 通常用來動態地產生字串 August 3, 2005 Page 3
Character & String Character 類別 一個 Character 物件儲存單一字元的值 constructor Character(char) methods compareto(charater) equals(object) tostring() charvalue() isuppercase(char) 相關用法及其他 methods 請查閱 J2SE 1.4.2 API August 3, 2005 Page 4
Characters & String String 類別 建立 String 物件 String xxx = ; String xxx; xxx = ; String xxx = new String( ); String xxx; xxx = new String( ); 連結字串 Joining 使用 + 運算子連結字串 例 :mystring = Hi! + How are you? ; 進行連結後的字串物件為全新的物件, 與原先之兩者不同 注意 :+ 運算子是由左向右運算 August 3, 2005 Page 5
Characters & String String methods int length(): 取得字串長度 ( 回傳所含字元總數 ) char charat(int index): 取得某個位置的字元 ( 注意 :index 從 0 開始 ) String substring(int startindex): 取得子字串, 從 startindex 之後的字串 String substring(int startindex, int endindex): 取得子字串, 從 startindex 至 endindex-1 的字串 字串長度 = endindex - startindex August 3, 2005 Page 6
Characters & String String methods(contd.) int compareto(string str): 比較字串 boolean equals(string str): 比較是否字串相等 intindexof(intch): 找尋字串中第一個出現 ch 字元的位置 String replace(char oldch, char newch): 取代所有字串中的 oldch 為 newch String[] split(string regex): 將字串以固定字串規則分開 char[] tochararray(): 將字串轉換成字元陣列 String trim(): 將字串前後的空白忽略, 並回傳新字串 String tolowercase(): 將字串內容轉小寫 String touppercase(): 將字串內容轉大寫 相關用法及其他 methods 請查閱 J2SE 1.4.2 API August 3, 2005 Page 7
Characters & String StringBuffer 建立 StringBuffer 物件 語法 :StringBuffer xxx = new StringBuffer(intCap) 一定得使用 new 呼叫建構元來建立物件, 並設定緩衝區 (buffer) 的容量 (capacity) 初始化時的 intcap 必須做適當的猜測, 要儘量減少記憶體分配的次數, 這會讓程式執行時較有效率 methods int length(): 取得字串長度 ( 回傳所含字元總數 ) int capacity(): 取得緩衝區容量 August 3, 2005 Page 8
Characters & String 修改 StringBuffer 物件 StringBuffer append( ) 增加字串 / 字元 / 至 StringBuffer 物件結尾 若增加後超過物件的容量, 則將自動在分配記憶體 分配記憶體將導致執行效率滑落, 故應儘量減少記憶體分配的動作 a reasonable first guess StringBuffer insert(intoffset, ) 插入字串 / 字元 / 至 StringBuffer 物件中 intoffset 必須介於 0 與 xxx.length() 之間 StringBuffer setcharat(intindex, charch) 將指定 intindex 位置的字元設定成 charch StringBuffer delete(intstartindex, intendindex) 刪除某特定範圍 (start to end-1) 的字元內容 StringBuffer deletecharat(intindex) 刪除 intindex 位置的字元 相關用法及其他 methods 請查閱 J2SE 1.4.2 API August 3, 2005 Page 9
Characters & String 將物件轉換成 String 物件 所有繼承自 Object 的類別, 都繼承了 tostring 方法, 且許多在 java.lang 套件中的類別以將此方法覆寫 (override), 以提供適當的應用 例 : 將 StringBuffer 物件轉換成 String 物件 String s = xxx.tostring(); // xxx 為 StringBuffer 物件 將基本型態變數轉換成 String 物件 String.valueOf( ) 例 :String.valueOf(intVal) 即 Integer.toString(intVal) 讀入字串 參閱 StringRead.java August 3, 2005 Page 10
Exercise 陣列資料處理 根據題目敘述, 將 MyArray 類別完成 (ArrayExercise.java) MyArray 類別含有以下 methods read_array(int data[], int len) 讀入並建立陣列資料 print_array(int data[], int len) 輸出陣列資料 min_array(int data[], int len) max_array(int data[], int len) sort_array(int data[], int len) 使用氣泡排序法將陣列資料由小至大排序 main() 的部分不需要更動, 僅須完成 MyArray 的功能 原始資料輸入, 內含 10 筆亂數整數, 以空白相隔 August 3, 2005 Page 11
Exercise 陣列資料處理 (contd.) final int NUM_DATA = 10; public static void main(string args[]) { int data[num_data]; MyArray.call_functions(READ_ARRAY, data, NUM_DATA); MyArray.call_functions(PRINT_ARRAY, data, NUM_DATA); System.out.println( MIN = + MyArray.call_functions(MIN_ARRAY, data, NUM_DATA) + \n ); System.out.println( MAX = + MyArray.call_functions(MAX_ARRAY, data, NUM_DATA) + \n ); MyArray.call_functions(SORT_ARRAY, data, NUM_DATA); MyArray.call_functions(PRINT_ARRAY, data, NUM_DATA); } 請自行定義 call_functions() 的內容 August 3, 2005 Page 12
Exercise 陣列資料處理 (contd.) 定義的常數, 用以決定該呼叫的 method final int PRINT_ARRAY = 0; final int MIN_ARRAY = 1; final int MAX_ARRAY = 2; final int SORT_ARRAY = 3; final int READ_ARRAY = 4; 例 : (Sample Input)5 2 6 8 1 2 7 3 9 10 5 2 6 8 1 2 7 3 9 10 MIN = 1 MAX = 10 1 2 2 3 5 6 7 8 9 10 August 3, 2005 Page 13
Exercise 氣泡排序法 (Bubble Sort) 比較相鄰的兩個值, 若前者大於後者, 則交換位置 例 : 7 2 3 8 5 9 4 2 7 3 8 5 9 4 2 3 7 8 5 9 4 2 3 7 5 8 9 4 2 3 7 5 8 9 4 2 3 7 5 8 4 9 以此類推, 不斷從頭循環至完成排列為止 每一循環皆可確定最大的數字在整列的最後方 August 3, 2005 Page 14
Exercise 字串接龍 當一個字串的開頭字母與另一字串的結尾字母相同, 則將兩字串頭尾相接 例 : cat tree catree 任意兩字串頭尾不會相同, 且字串頭尾字母也不同 ; 接龍結果唯一, 不會有多重結果 輸入資料, 第一行為字串總數, 接著一筆資料一行 例 :3 apple tree event appleventree August 3, 2005 Page 15