2012-10-31 91 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()

相关问题