2011-06-28 285 views
2

Character[]轉換爲char[]String的最佳方法是什麼?將字符[]轉換爲字符串

一種方法是手動循環當前在for(char c : CharacterArray)循環中的字符數組,並追加到StringBuilderStringBuilder似乎也直接接受了Character[],但是,這一切呢?

+0

@jleedev:認爲我是一個類型安全的堅果:-) – Bhaskar

+1

@Bhaskar,幾乎沒有一個很好的理由使用'Character []'最好的辦法是重構你的代碼,所以你不要首先沒有人。改用'char []'或者'StringBuilder'。 –

+0

@Peter Lawrey:我有一個泛型類型,其中一個泛型類型參數必須是'字符' - 我不知道任何其他方式來處理這個比使用一個字符,然後使我在提到的情況下。 – Bhaskar

回答

3

commons-lang有一個toPrimitive method,但在標準API中沒有這樣的東西。唯一的方法是遍歷數組並將每個字符轉換爲char(並決定如何處理空值)。

2

我會建議使用一個簡單的循環轉換Character[]char[],然後通過它進入新的String();

Character[] characters = new Character[128]; 
    char[] chars = new char[characters.length]; 
    int length = characters.length; 
    for(int i=0; i<length; i++) { 
     chars[i] = characters[i].charValue(); 
    } 
    String string = new String(chars); 

另一種方法是創建通過StringBuilder環和單獨添加每個字符。

Character[] characters = new Character[128]; 
    StringBuilder sb = new StringBuilder(characters.length); 
    for(Character c : characters) { 
     sb.append(c); 
    } 
    String string = sb.toString(); 

我有一種感覺,第一種方法可能更有效,但我不確定。

+0

如果你初始化'StringBuilder'具有足夠的容量,第二種方式應該是有效的。 –

+0

的確,第一個要快得多。 'StringBuilder'每次都會重新創建一個比前一個字符大一個字符的新緩衝區。我檢查了'StringBuilder'的Java源代碼。除非你用給定的數組大小構造StringBuilder。然後,不需要重新創建緩衝區。那麼表現將是一樣的。 –

+0

實際上,如果你做'新的StringBuilder(characters.length);'它將是最有效的,如果附加和拆箱被JIT內聯,因爲構建器中的基礎char []將用於結果字符串 –