[Java] 12.4. String vs StringBuilder

String類別,幫你處理字串後產生新的字串。 StringBuilder類別,則讓你一再的"建設"同一個字串。

 

image/svg+xml12.4.String vs StringBuilder class Main{ public static void main( String [] args){ String memoir1 = " 我是王⼤明,家住澎湖,家裡養了⼀隻會游泳的狗, " ; String memoir2 = memoir1 . replace ( " 王⼤明 ", “ 王⼩明 " ); String memoir3 = memoir 2. concat ( " 還有⼀隻很會吃的豬 " ); System.out.println( memoir1 ); System.out.println( memoir2 ); System.out.println( memoir3 ); } } 執⾏結果 我是王⼤明,家住澎湖,家裡養了⼀隻會游泳的狗, 我是王⼩明,家住澎湖,家裡養了⼀隻會游泳的狗, 我是王⼩明,家住澎湖,家裡養了⼀隻會游泳的狗,還有⼀隻很會吃的豬 class Main{ public static void main( String [] args){ StringBuilder memoir1 = new StringBuilder ( " 我是王⼤明,家住澎湖,家裡養了⼀隻會游泳的狗, " ); StringBuilder memoir2 = memoir1 . replace ( memoir1 . indexOf ( " 王⼤明 " ), memoir1 . indexOf ( " 王⼤明 " )+ 3 , " 王⼩明 " ); StringBuilder memoir3 = memoir2 . append ( " 還有⼀隻很會吃的豬 " ); System.out.println( memoir1 ); System.out.println( memoir2 ); System.out.println( memoir3 ); } } 執⾏結果 我是王⼩明,家住澎湖,家裡養了⼀隻會游泳的狗,還有⼀隻很會吃的豬 我是王⼩明,家住澎湖,家裡養了⼀隻會游泳的狗,還有⼀隻很會吃的豬 我是王⼩明,家住澎湖,家裡養了⼀隻會游泳的狗,還有⼀隻很會吃的豬 下表為 StringBuilder 常⽤的⽅法: class Main{ public static void main( String [] args){ StringBuilder sb = new StringBuilder ( " 今天是星期天 " ); sb.insert ( 2 , " 12/19 " ); System.out.println(sb); sb.reverse (); System.out.println(sb); sb.delete ( sb.length()- 2 , sb.length() ); System.out.println(sb); sb. reverse (); System.out.println(sb); sb.append ( " !! " ); System.out.println(sb); } } 下表為 String 類別常⽤的⽅法: class Main{ public static void main( String [] args){ String str1 = " 王⼤明是 abc " ; String str2 = str1 . toUpperCase (); System.out.println(str2); String str3 = str2 . toLowerCase (); System.out.println(str3); System.out.println( str3 . charAt ( 4 )); System.out.println(str3.charAt( 5 )); System.out.println(str3.charAt( 6 )); String str4 = str3 . substring ( 4 , 7 ); System.out.println(str4); } } 函式名稱 功能說明 append() 加入字串 delete() 刪除⼀段⼦字串 indexOf() 找出特定字串或字元的所在位置,無符合字串或字元時回傳 -1 insert() 插入⼀段字串⾄指定位置 length() 回傳⼀個 String 的字元個數 replace() 使⽤新字串或字元替換舊字元 reverse() 將字串反轉 toString() 將內容值轉換為 String 物件後傳回 函式名稱 功能說明 charAt() 回傳在指定位置的字元 concat() 附加⼀個 String 在另⼀個 String 的後⾯ equalsIgnoreCase() 判斷兩個 String 是否相等,憼略⼤⼩寫 indexOf() 找出特定字串或字元的所在位置,無符合字串或字元時回 -1 length() 回傳⼀個 String 的字元個數 replace() 使⽤新字串或字元替換舊字元 substring() 回傳部份 String toLowerCase() 回傳⼀個將⼤寫字元轉成⼩寫字元的字串 toString() 回傳 String 的值 toUpperCase() 回傳⼀個將⼩寫字元轉成⼤寫字元的字串 trim() 移除 String 兩端的空⽩ J12_4_1 –Main.java 2. 使⽤ String 類別的 replace() ⽅法,將錯誤的 王⼤明 換成 王⼩明 ,在存放於 memoir2 變數中。 J12_4_2 –Main.java 1. 建立⼀個字串,以表⽰個⼈⾃傳中的資訊 並存放於 memoir1 變數中。 3. 使⽤ String 類別的 cancat() ⽅法,將在⾃傳的後⽅加上新 的內容 還有⼀隻很會吃的豬 ,並存放於 memoir3 變數中。 4. 無麼 memoir1 memoir2 memoir3 中的變數都有不 同的⾃傳內容呢?不是已經透過 replace() ⽅法與 concat() ⽅法重新修改⾃傳中的內容嗎?到底要如何讓⾃傳字串只保留 ⼀份,並對同⼀份⾃傳字串作修改呢? 1. 建立⼀個 StringBuilder 物件,並將⾃傳 字串作為其參數,⽽後存放於 memoir1 變數中。 2. 使⽤ replace() ⽅法,將 王⼤明 取代為 王⼩明 ,並在存放於另⼀個變數 memoir2 中。 3. replace() ⽅法中,可另外使⽤ indexOf() ⽅法,將 王⼤明 字串所 在的位置找出來,以作為 replace() ⽅法的第 1 個參數,⽽第 2 個參數⽤以指 定結束的位置,以 indexOf(“ 王⼤ ”)+3 的⽅式作為結束位置。  . replace() ⽅法的最後⼀個 參數即是替代的字串 王⼩明 5. 使⽤ append() ⽅法,在⾃傳字串的後⽅加上 還有 ⼀隻很會吃的豬 ,並在存放於另⼀個變數 memoir3 中。 6. 這時不論我們從哪⼀個變數中取出 StringBuilder 物件列 印,得到的皆會是相同的⾃傳內容,原因是 StringBuilder 在作任何修改時,是會直接修改本物件中的字串內容,⽽後在 回傳本物件,如此就達到修改同⼀份⾃傳內容的需求了。 J12_4_3 –Main.java 1. StringBuilder 類別的 insert() ⽅法,可將字串插入 特定的位置,此例為將 “12/9” 字串插入索引位置 2 中。 2. reverse() ⽅法,可將字串整個字串 中的字元反轉過來排列。 3. delete() ⽅法,可將刪除特定位置上的字串。第 1 個參數 ⽤以指定刪除的起始位置,第 2 個為刪除的結束位置。 5. append() ⽅法,可於字串的後⽅加上新的字串。 J12_4_4 –Main.java 1. String 類別的 toUpperCase() ⽅法,可將字串 中的英⽂字⺟全部轉為⼤寫,如 a 變為 A 2. toLowerCase() ⽅法,可將字串中的 英⽂字⺟全部轉為⼩寫,如 B 變為 b 3. charAt() ⽅法,取得特定索引位置上的字元。 4. substring() ⽅法,可將掘取特定位置的部份字 串,第 1 個參數為起始位置,第 2 個參數為結束位置。 稍微修改⼀下⾃傳, 但怎麼在修改後產⽣ 2 份以上不同的⾃傳? StringBuilder 類別,直接修改同⼀份⾃傳 1 1 StringBuilder 類別常⽤⽅法 4. reverse() ⽅法,可以將字串倒轉過來。 String 類別常⽤⽅法

留言