将CharacterList of Character转换为String的最佳方法

时间:2012-01-12 16:37:54

标签: java arrays string

我想将Character的CharacterList转换为String。我读了类似Best way to convert an ArrayList to a string之类的线程,但我想要更简单的方法。

我试过这个

List<Character> chars = new ArrayList<Character>();
...
Character[] charArray = (Character[]) chars.toArray();
String output = new String(charArray); // error

但它没有用,因为new String()构造函数只接受char[]作为参数。我无法轻易将charscharArray转换为char[]类型。

有没有简单的方法?或者,我是否必须迭代才能制作字符串?

5 个答案:

答案 0 :(得分:4)

这很简单:

StringBuilder result = new StringBuilder(chars.size());
for (Character c : chars) {
  result.append(c);
}
String output = result.toString();

答案 1 :(得分:3)

是的,不幸的是,你必须进行迭代。

char[] cs = new char[chars.size()];

for(int i = 0; i < cs.length; i++) {
    cs[i] = chars.get(i);
}

String output = new String(cs);

答案 2 :(得分:2)

一种简单的方法是将每个字符附加到字符串:

String myString = "";
for (Character c : charList) {
    myString += c;
}

这会遍历列表以附加每个字符。

结果:

charList的输出是:[a, b, c]。 myString的输出是:abc

答案 3 :(得分:2)

我只是运行了一些基准,因为我对最快的方式感兴趣。 我运行了4种不同的方法,每种方法分别为1.000.000(1百万)次。

旁注:

  • ArrayList填充了2710个字符,
  • 输入是我躺着的一些随机json字符串,
  • 我的电脑最强(Cpu:AMD Phenom II X4 955 @ 3.20 GHz)。

1)转换为数组,然后转换为字符串(adarshr's Answer)

char[] cs = new char[chars.size()];
for(int x = 0; x < cs.length; x++){
    cs[x] = chars.get(x);
}
String output = new String(cs);

时间:7716056685纳秒或~7.7秒/索引:1

2)使用具有预定义大小的StringBuilder来收集每个角色(Sean Owen的答案)

StringBuilder result = new StringBuilder(chars.size());
for(Character c : chars){
    result.append(c);
}
String output = result.toString();

时间:77324811970纳秒或~77.3秒/指数:~10

3)使用没有预定义大小的StringBuilder来收集每个字符

StringBuilder result = new StringBuilder();
for(Character c : chars){
    result.append(c);
}
String output = result.toString();

时间:87704351396纳秒或~87.7秒/指数:~11,34

4)创建并清空字符串,只需+ =每个字符(Jonathan Grandi&#39;答案)

String output = "";
for(int x = 0; x < cs.length; x++){
    output += chars.get(x);
}

时间:4387283410400纳秒或~4387.3秒/指数:~568,59

我实际上不得不缩小这个。这个方法只运行10000次,已经花了大约43秒,我只是将结果乘以100得到近似的1.000.000次运行

Conclussion:

使用&#34;转换为数组,然后转换为字符串&#34;方法......它快......另一方面我不会认为+ =操作太慢......

我如何测试:

final String jsonExample = new String("/* Random Json String here */");
final char[] charsARRAY = jsonExample.toCharArray();
final ArrayList<Character> chars = new ArrayList<Character>();
for(int i = 0; i < charsARRAY.length; i++){
    chars.add(charsARRAY[i]);
}
final long time1, time2;
final int amount = 1000000;

time1 = System.nanoTime();

for(int i = 0; i < amount; i++){
    // Test method here
}

time2 = System.nanoTime();

答案 4 :(得分:0)

尝试番石榴:

Joiner.on("").join(chars);

或commons-lang:

StringUtils.join(chars, null);