2014-07-23 92 views
1

我有一個代碼。Java快速生成零字符串

private static String generateString(int size) { 
    StringBuffer s = new StringBuffer(); 
    for (int i = 0; i < size; i++) 
     s.append("0"); 
    return s.toString(); 
} 

其產生箱用於0000大小= 4

如何可以簡化這個代碼塊?

+1

爲什麼你需要簡化它? – Keppil

+0

這很簡單,不是嗎?而且你不會快得多 – Dakkaron

+0

請優先選擇可讀的代碼。 Java的速度足夠快了。 –

回答

9

我不確定你的意思是「快」 - 快速的代碼行少,或CPU執行快?請使用StringBuffer。它是線程安全的並且非常同步。如果有的話,StringBuilder有更小的佔地面積。

這裏雖然替代:

char[] c = new char[10]; 
Arrays.fill(c, '0'); 
String result = new String(c); 

它比StringBuilder還要輕,這可能是由於光,因爲它得到。 StringBuilder也在內部附加到char[],但不知道預先設置的大小,它總是在進行範圍檢查並根據需要縮放緩衝區。你可以構造一個StringBuilder(n),但它仍然會做浪費的邊界檢查,你將不得不編寫循環來追加你自己。

+0

您是否需要添加空終止符或自動完成? – SyntaxTerror

+0

@插入用戶名在這裏不,你不需要。在Java中,所有數組都是有界的,並且這個String構造函數通過複製整個提供的數組來構建一個新的String。 –

+0

Gotcha。 C正在搞亂我的Java知識= P – SyntaxTerror

2

你的代碼是好的,但在這種情況下應該使用StringBuilder的代替一個的StringBuffer的(更好的性能比較,你不需要的StringBuffer的同步性質)

4

假設最大值的大小是100:

private static STRING = "0000..."; // length = 100 

private static String generateString(int size) { 
    return STRING.substring(0, size); 
} 
+0

Yeap!那是我需要的。 –

+0

你知道'substring()'方法的代價嗎? –

+0

Arrays.copy比添加到緩衝區的工作更快。 –