[英]Best way to convert ArrayList of Character to String
我想将字符的 ArrayList 转换为字符串。 我读过类似的线程,例如将 ArrayList 转换为字符串的最佳方法,但我想要更简单的方法。
我试过这个
List<Character> chars = new ArrayList<Character>();
...
Character[] charArray = (Character[]) chars.toArray();
String output = new String(charArray); // error
但它不起作用,因为new String()
构造函数只接受char[]
作为参数。 我无法轻松地将chars
或charArray
转换为char[]
类型。
没有简单的方法吗? 或者,我是否必须迭代才能创建一个字符串?
这很简单:
StringBuilder result = new StringBuilder(chars.size());
for (Character c : chars) {
result.append(c);
}
String output = result.toString();
是的,不幸的是,您必须进行迭代。
char[] cs = new char[chars.size()];
for(int i = 0; i < cs.length; i++) {
cs[i] = chars.get(i);
}
String output = new String(cs);
一种简单的方法是将每个字符附加到一个字符串中:
String myString = "";
for (Character c : charList) {
myString += c;
}
这将遍历列表以附加每个字符。
结果:
charList 的输出是: [a, b, c]
。 myString 的输出是: abc
。
我只是运行了一些基准测试,因为我对最快的方式很感兴趣。 我运行了 4 种不同的方法,每种方法都运行了 1.000.000(100 万)次以进行良好测量。
边注:
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
StringBuilder result = new StringBuilder(chars.size());
for(Character c : chars){
result.append(c);
}
String output = result.toString();
时间:77324811970 纳秒或 ~77.3 秒/索引:~10
StringBuilder result = new StringBuilder();
for(Character c : chars){
result.append(c);
}
String output = result.toString();
时间:87704351396 纳秒或 ~87.7 秒 / 索引:~11,34
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 次运行
使用“转换为数组,然后转换为字符串”方法......它很快......另一方面,我没想到 += 操作如此缓慢......
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();
试试番石榴:
Joiner.on("").join(chars);
或公共语言:
StringUtils.join(chars, null);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.