將Character[]
轉換爲char[]
或String
的最佳方法是什麼?將字符[]轉換爲字符串
一種方法是手動循環當前在for(char c : CharacterArray)
循環中的字符數組,並追加到StringBuilder
。 StringBuilder
似乎也直接接受了Character[]
,但是,這一切呢?
將Character[]
轉換爲char[]
或String
的最佳方法是什麼?將字符[]轉換爲字符串
一種方法是手動循環當前在for(char c : CharacterArray)
循環中的字符數組,並追加到StringBuilder
。 StringBuilder
似乎也直接接受了Character[]
,但是,這一切呢?
commons-lang有一個toPrimitive method,但在標準API中沒有這樣的東西。唯一的方法是遍歷數組並將每個字符轉換爲char(並決定如何處理空值)。
我會建議使用一個簡單的循環轉換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();
我有一種感覺,第一種方法可能更有效,但我不確定。
如果你初始化'StringBuilder'具有足夠的容量,第二種方式應該是有效的。 –
的確,第一個要快得多。 'StringBuilder'每次都會重新創建一個比前一個字符大一個字符的新緩衝區。我檢查了'StringBuilder'的Java源代碼。除非你用給定的數組大小構造StringBuilder。然後,不需要重新創建緩衝區。那麼表現將是一樣的。 –
實際上,如果你做'新的StringBuilder(characters.length);'它將是最有效的,如果附加和拆箱被JIT內聯,因爲構建器中的基礎char []將用於結果字符串 –
@jleedev:認爲我是一個類型安全的堅果:-) – Bhaskar
@Bhaskar,幾乎沒有一個很好的理由使用'Character []'最好的辦法是重構你的代碼,所以你不要首先沒有人。改用'char []'或者'StringBuilder'。 –
@Peter Lawrey:我有一個泛型類型,其中一個泛型類型參數必須是'字符' - 我不知道任何其他方式來處理這個比使用一個字符,然後使我在提到的情況下。 – Bhaskar