2012-10-31 95 views
8

我有一個Character數組(非char數組),我想通過組合數組中的所有字符將其轉換爲字符串。將字符數組轉換爲Java中的字符串

我曾嘗試給定Character[] a如下:

String s = new String(a) //given that a is a Character array 

但是,這並不工作,因爲不是一個字符數組。我將不勝感激任何幫助。

+0

上面正在處理字符[] :) –

回答

5

迭代並連接的方法:

Character[] chars = {new Character('a'),new Character('b'),new Character('c')}; 

String str = ""; 

for (Character c : chars) 
    str += c.toString(); 

System.out.println(str); 

輸出:

ABC

+3

我只是檢查這編譯爲一個StringBuilder,爲相當大的'n' ..我認爲*這將發生。 – 2012-10-31 03:12:54

+0

因此,對於N長度數組,您將以內存中的N個字符串結尾 –

+1

@pst - 我非常確定JLS不會在多個語句中批准字符串級聯優化。 –

14
Character[] a = ... 
new String(ArrayUtils.toPrimitive(a)); 

ArrayUtilsApache Commons Lang一部分。

+5

對於班級+1我不知道,我不明白爲什麼這樣的班級不在JDK中: -/ – Betlista

+0

它沒有做任何特別的事情。它只是創建一個相同長度的char []並添加char值。非常基本的代碼。 JDK的工作是關注語言核心並解決不那麼簡單的常見問題。開源實用程序庫是適合此的地方。 – rees

+1

這個庫不應該包含在這個解決方案中,但我的經驗是,我總是已經包含了其他東西! – rees

2

在每個索引處,調用toString方法,並將結果連接到您的String。

2

首先轉換Character[]char[],並使用String.valueOf(char[])得到如下字符串:

char[] a1 = new char[a.length]; 
    for(int i=0; i<a.length; i++) { 
     a1[i] = a[i].charValue(); 
    } 
    String text = String.valueOf(a1); 
    System.out.println(text); 
2

如何創建自己的方法,通過字符數組的列表上循環再追加每個值到新的字符串。

就是這樣。

public String convertToString(Character[] s) { 
    String value; 

    if (s == null) { 
    return null; 
    } 

    Int length = s.length(); 
    for (int i = 0; i < length; i++) { 
    value += s[i]; 
    } 

    return value; 
} 
+0

你在調用'length()'後檢查's'是否爲null。 – rees

+0

應該注意到,起初我打算爲其他人優化示例練習。 :) – Tom

+0

國際海事組織,'null'檢查被誤導。默認情況下,一個'null'參數是由程序員的錯誤引起的,處理它的最好方法是拋出一個NPE。 –

3

這也可能是緩慢的,但踢這裏是一個醜陋的一行比其它方法不同 -

Arrays.toString(characterArray).replaceAll(", ", "").substring(1, characterArray.length + 1); 
8

最有效的方式做到這一點是最有可能的:

Character[] chars = ... 

StringBuilder sb = new StringBuilder(chars.length); 
for (Character c : chars) 
    sb.append(c.charValue()); 

String str = sb.toString(); 

注:

  1. 使用StringBuilder避免了創建多箇中間字符串。
  2. 提供初始大小可避免重新分配。
  3. 使用charValue()避免調用Character.toString() ...

不過,我可能會用@去Torious優雅的答案,除非性能是一個顯著的問題。


順便說一句,JLS說,允許編譯器優化使用StringBuilder的等價代碼字符串連接表情......但它不制裁在多個語句的優化。因此,類似這樣的:

String s = "" 
    for (Character c : chars) { 
     s += c; 
    } 

可能會做很多單獨的連接,創建(和丟棄)大量的中間字符串。

0
int length = cArray.length; 
String val=""; 
for (int i = 0; i < length; i++) 
    val += cArray[i]; 
System.out.println("String:\t"+val); 
3

可能矯枉過正,但關於Java 8,你可以這樣做:

Character[] chars = {new Character('a'),new Character('b'),new Character('c')}; 

String value = Arrays.stream(chars) 
       .map(Object::toString) 
       .collect(Collectors.joining()); 
+1

'Arrays.asList(chars).stream()'可以簡化爲'Arrays.stream(chars)' – Roman

0

其實,如果你有番石榴,您可以使用Chars.toArray()生產char[]則僅僅是結果發送到String.valueOf()

相關問題