290 likes | 479 Views
第 6 章. 字 串 認識字串( String ) 字串進階運用. String 類別. String text = " 字串的使用 "; System.out.println(text);. 在某些程式語言中,字串是以字元陣列的方式存在 在 Java 中字串不僅僅是字元陣列,而是 String 類別的一個實例( Instance ). String 類別. String msg = " 哈囉! "; msg = msg + "Java 程式設計! "; System.out.println(msg);. 字串必須使用 "" 來包括您的文字
E N D
第6章 字 串 認識字串(String) 字串進階運用
String類別 String text = "字串的使用"; System.out.println(text); 在某些程式語言中,字串是以字元陣列的方式存在 在Java中字串不僅僅是字元陣列,而是String 類別的一個實例(Instance)
String類別 String msg = "哈囉!"; msg = msg + "Java程式設計!"; System.out.println(msg); 字串必須使用""來包括您的文字 字串的字元是使用Unicode字元來建構 字串以 '+' 互相串接
String類別 String text = "hello"; System.out.println("字串內容: " + text); System.out.println("字串長度: " + text.length()); System.out.println("等於hello? " + text.equals("hello")); System.out.println("轉為大寫: " + text.toUpperCase()); System.out.println("轉為小寫: " + text.toLowerCase()); 字串在Java中以String類別的一個實例存在
String類別 將輸入的字串轉換為整數、浮點數等 指定的字串無法剖析為指定的資料型態數值,則會發生NumberFormatException例外
String類別 String str = new String("caterpillar"); String str = "caterpillar"; 以配置物件的觀念來宣告字串 兩種宣告方式是有所差別的
String類別 使用索引取得字元的相關方法
String類別 String[] filenames = {"caterpillar.jpg", "cater.gif", "bush.jpg", "wuwu.jpg", "clockman.gif"}; System.out.print("過濾出jpg檔案: "); for(int i = 0; i < filenames.length; i++) { if(filenames[i].endsWith("jpg")) { System.out.print(filenames[i] + " "); } } System.out.println(""); endsWith()方法
不可變(immutable)字串 String str = "Just"; str = "Justin"; 一個字串物件一旦被配置,它的內容就是固定不可變的(immutable) 不要以為下面的陳述就是改變一個字串物件的內容
不可變(immutable)字串 String str1 = "flyweight"; String str2 = "flyweight"; System.out.println(str1 == str2); 對於一些可以共享的字串物件,會先在String池中查找是否存在相同的String內容 當您直接在程式中使用""來包括一個字串時,該字串就會在String池中
不可變(immutable)字串 • String的intern()方法 • 如果池(Pool)中已經包括了相同的String物件(相同與否由equals()方法決定),那麼會從池中返回該字串 • 否則原String物件會被加入池中,並返回這個String物件的參考
不可變(immutable)字串 String str1 = "fly"; String str2 = "weight"; String str3 = "flyweight"; String str4 = null; str4 = str1 + str2; System.out.println(str3 == str4); str4 = (str1 + str2).intern(); System.out.println(str3 == str4);
不可變(immutable)字串 String str1 = new String("caterpillar"); String str2 = new String("caterpillar"); System.out.println(str1 == str2); String str1 = new String("caterpillar"); String str2 = new String("caterpillar"); System.out.println(str1.equals(str2)); 不可用 == 比較字串的字元內容是否相同 要比較兩個字串物件的字元值是否相同,必須使用equals()方法
StringBuilder類別 • 使用'+'來串接字串以達到附加新字元或字串的目的,但'+'會產生一個新的String實例 • 不建議使用'+'來進行字串的串接 • 建議先以StringBuilder串接字串,最後再以toSTring()方法生成最終的字串 • 垃圾減量、提昇效能
StringBuilder類別 String text = ""; long beginTime = System.currentTimeMillis(); for(int i = 0; i < 10000; i++) text = text + i; long endTime = System.currentTimeMillis(); System.out.println("執行時間:" + (endTime - beginTime)); StringBuilder builder = new StringBuilder(""); beginTime = System.currentTimeMillis(); for(int i = 0; i < 10000; i++) builder.append(String.valueOf(i)); endTime = System.currentTimeMillis(); System.out.println("執行時間:" + (endTime - beginTime));
命令列引數 public static void main(String[] args) { System.out.print("讀入的引數: "); for(int i = 0; i < args.length; i++) System.out.print(args[i] + " "); System.out.println(); } java CommandLineArg -file student.dat 讀入的引數: -file student.dat 在main()的參數列撰寫String[] args,目的就是用來接受一個字串陣列
分離字串 String[] fakeFileData = { "justin\t64/5/26\t0939002302\t5433343", "momor\t68/7/23\t0939100391\t5432343" }; for(String data : fakeFileData) { String[] tokens = data.split("\t"); for(String token : tokens) { System.out.print(token + "\t| "); } System.out.println(); } 使用String的split()
使用正則表示式(Regular Expression) matches()、replaceAll()等方法時使用 Java在J2SE 1.4之後開始支援正則表示式 可以在API文件的java.util.regex.Pattern類別中找到支援的正則表示式相關資訊
使用正則表示式 幾個常用的字元比對符號
使用正則表示式 String text = "abcdebcadxbc"; String[] tokens = text.split(".bc"); for(String token : tokens) { System.out.print(token + " "); } System.out.println(); tokens = text.split("..cd"); for(String token : tokens) { System.out.print(token + " "); } System.out.println();
使用正則表示式 Character class
使用正則表示式 Greedy quantifiers
Pattern、Matcher 將正則表示式視為一個物件來重複使用,可用Pattern的靜態方法compile()進行編譯 compile()方法會傳回一個Pattern的實例,這個實例代表您的正則表示式
Pattern、Matcher String phones1 = "Justin 的手機號碼:0939-100391\n" + "momor 的手機號碼:0939-666888\n"; Pattern pattern = Pattern.compile(".*0939-\\d{6}"); Matcher matcher = pattern.matcher(phones1); while(matcher.find()) { System.out.println(matcher.group()); } String phones2 = "caterpillar 的手機號碼:0952-600391\n" + "bush 的手機號碼:0939-550391"; matcher = pattern.matcher(phones2); while(matcher.find()) { System.out.println(matcher.group());
Pattern、Matcher String text = "abcdebcadxbc"; Pattern pattern = Pattern.compile(".bc"); Matcher matcher = pattern.matcher(text); while(matcher.find()) { System.out.println(matcher.group()); } System.out.println();
習題:阿拉伯數字換轉成國字 輸入阿拉伯數字,例如2345,將之轉換成貳仟參佰肆拾伍
習題:阿拉伯數字金額換轉成國字金額 • 輸入阿拉伯數字金額,將之轉換成國字金額輸出 • 例: • 12,345 • 壹萬貳仟參佰肆拾伍 • 例: • 10023 • 壹萬零貳拾參