1.System.out.printf()是從C那邊取得的方法
String demoStr = "a %s boy which is %d feet height";
System.out.pintf(demoStr, "litle", 15);
字串中的%s,%d 分別會被替換成字串little、數值15
String.format()方法具有相同的使用方式及效果
例如:string temp = String.format(demoStr, "litle", 15);
以下為常用替換表示,大小寫區別在輸出的字串以大寫或小寫輸出
%% - 用來在字串中表示%
%d - 以10進位整數格式輸出,可用於byte、short、int、long
%f - 以10進位浮點數格式輸出,可用於float、double、Float、Double、BigDecimal
%e、%E - 以科學記號浮點數格式輸出
%e指輸出格式遇到字母以小寫表示,%E則為以大寫表示
%x、%X - 以16進為整數格式輸出
%s、%S - 以字串格式符號輸出
%c、%C - 以字元符號輸出
%b、%B - 輸出blloean值
另一個較常見的替換輸出的需求則是在文字左側補上 0
例如月份可能不想用 2016/1 而是想用 2016/01
此時可以直接用 String.format("%02d", number); 這樣的方式處理,上色處為0的位數
上面那行如果輸入數字1會吐字串01回來,數字11則吐字串11
2.String以+運算符大量連結字串時常會被詬病效率低的因素
在串聯字串相當簡單的情況下,使用String是可以接受的方法
例如:String temp = "aaa" + "bbb" + "ccc";
此時使用+運算符會比StringBuilder跟StringBuffer的版本來的快
這是因為JVM會直接判斷為 String temp = "aaabbccc";
省掉連結字串的處理
但大部分使用連結字串的情境,是需要連結變數,此時JDK會自動將 "+" 轉成StringBuilder
String temp = "hi";
String temp2 = temp + "hello";
編譯後類似如下:
String temp = "hi";
String temp2 = new StrigBuilder().append(temp).append("hello").toString();
但這樣並不代表可以任意使用 "+" 這個operator
例如:
str += a;
str += b;
str += c;
每一個 += 的過程都會生成了新的StringBuilder物件
程式的主要瓶頸就在於物件的生成
如果要串接大量字串,還是使用StringBuilder比較有效率
str = new StrigBuilder(str).append(a).append(b).append(c).toString()
StringBuffer是與StringBuilder作用類似的物件,但支援Multi-thread的環境
在單工的環境下效率會較差
在部分的Java版本中,做較少量的字串連結時StringBuffer的效率會看似較高
這只是因為有些版本的StringBuffer的初始化會較StringBuilder來的快
在大部分的場合,特別是字串連結量大的時候,StringBuilder絕對是首選
另外順帶一提的是
String a = "ja" + "va";
String b = "java";
System.out.print(a == b); //output true
JVM會判斷a字串的結果與b字串相同
進而使兩者從String pool引用相同的字串
3.StringBuilder的清空或移除部分項目
繼前面提到了 StringBuilder 的使用
StringBuilder 的 setLength() 是一個相當有趣的 method
雖然其本身有 delete() 這個 method提供了刪除內容項目的功能
透過 setLength() 設定StringBuilder的長度也可以做到接近的效果
例如使用 StringBuilder物件.setLength(0); 就能清空整個StringBuilder物件
設定的長度較StringBuilder物件長度為短的話,多餘的字串會被清除
4.字串使用split()切割成字串陣列
這個操作方式要略為注意分割符的後段字元會受到脫逸(trim)影響
舉例來說"1,2,,,".split(",") 這樣切割出來的內容會是["1","2"]
而 "1,2,,3,".split(",")則會切成["1", "2", "", "3"]
分割符切出來的尾端如果是連續的空字串,則這些空字串不會被放進字串陣列
所以如果要維持字串陣列的長度為固定值,可以在split這個方法傳入第二個參數
第二個參數的數值為到指定的字串index前都不會進行脫逸,假如是-1就代表整個字串都不會脫逸
舉例來說 "1,2,,,".split(",", -1),就能得到["1", "2", "", "", ""]
留言
張貼留言