在Java中将Character数组转换为字符串

Aas*_*daq 10 java string char

我有一个Character数组(不是char数组),我想通过组合数组中的所有字符将其转换为字符串.

我已经尝试了以下内容Character[] a:

String s = new String(a) //given that a is a Character array
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为a不是char数组.我将不胜感激任何帮助.

Tor*_*ous 15

Character[] a = ...
new String(ArrayUtils.toPrimitive(a));
Run Code Online (Sandbox Code Playgroud)

ArrayUtilsApache Commons Lang的一部分.

  • 我不知道上课的+1,我不明白为什么这样的课不在JDK中: - / (5认同)

Ste*_*n C 8

最有效的方法是:

Character[] chars = ...

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

String str = sb.toString();
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 使用StringBuilder可以避免创建多个中间字符串.
  2. 提供初始大小可避免重新分配.
  3. 使用charValue()避免调用Character.toString()...

但是,除非性能是一个重要问题,否则我可能会选择@ Torious的优雅答案.


顺便提一下,JLS说允许编译器使用等效的StringBuilder代码来优化String并置表达式......但它不会批准跨多个语句的优化.因此这样的事情:

    String s = ""
    for (Character c : chars) {
        s += c;
    }
Run Code Online (Sandbox Code Playgroud)

很可能会做很多单独的连接,创建(并丢弃)许多中间字符串.


Juv*_*nis 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);
Run Code Online (Sandbox Code Playgroud)

输出:

ABC

  • 我只是检查这个编译成一个StringBuilder,对于相当大的`n` ..我想*这些天会发生. (3认同)