我想要将字符串数组转换为字符串的Java代码。
array.toString()
?更加详细一些。
我想要将字符串数组转换为字符串的Java代码。
array.toString()
?更加详细一些。
Answers:
如果您只想要数组的“调试样式”转储:
String str = Arrays.toString(arr);
或者,为了获得更多控制权(在Java 8之前):
StringBuilder builder = new StringBuilder();
for(String s : arr) {
builder.append(s);
}
String str = builder.toString();
(Java 8及更高版本):
String str = String.join(",", arr);
如果您是从Android角度出发:
String str = TextUtils.join(",", arr);
您可以根据需要在字符串之间使用哪些字符(如有)来修改以上内容。
您可能会看到与Java 8之前的代码几乎相同的代码,但是使用StringBuffer
- StringBuilder
是一种较新的类,该类不是线程安全的,但是由于不需要不必要的同步,因此在单线程中具有更好的性能。简而言之,您最好StringBuilder
在99%的情况下使用-从功能上来说,两者是相同的。
不要使用字符串,只需在字符串后加上+ =即可,如此处显示的一些答案所示。这会使GC穿过屋顶,因为创建和丢弃的字符串对象与数组中包含的项一样多。对于小型阵列,您可能不会真正注意到差异,但是对于大型阵列,速度可能会慢几个数量级。
Arrays.toString(yourArray);
但我想您使用过yourArray.toString();
使用Apache Commons StringUtils.join()
。它使用一个数组作为参数(并且还有Iterable
和Iterator
参数的重载),并调用toString()
每个元素(如果不为null)以获取每个元素的字符串表示形式。然后,将每个元素的字符串表示形式连接成一个字符串,并在指定之间使用分隔符:
String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);
产生:
a-b-1
我喜欢为此使用Google的Guava Joiner,例如:
Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");
将产生与以下相同的字符串:
new String("Harry, Ron, Hermione");
预计到达时间:Java 8现在具有类似的支持:
String.join(", ", "Harry", "Ron", "Hermione");
看不到对跳过空值的支持,但这很容易解决。
null
将是“他的名字不能被提及的人” :-)
Joiner.on(", ").useForNull("Voldemort").join("Harry", null, "Ron", "Hermione");
String.join(", ", "Harry", null, "Ron", "Hermione").replaceAll("null", "Voldermart");
尝试使用Arrays.deepToString方法。
返回指定数组的“深层内容”的字符串表示形式。如果数组包含其他数组作为元素,则字符串表示形式包含其内容,依此类推。此方法用于将多维数组转换为字符串
尝试使用Arrays.toString重载方法。
否则,请尝试以下通用实现:
public static void main(String... args) throws Exception {
String[] array = {"ABC", "XYZ", "PQR"};
System.out.println(new Test().join(array, ", "));
}
public <T> String join(T[] array, String cement) {
StringBuilder builder = new StringBuilder();
if(array == null || array.length == 0) {
return null;
}
for (T t : array) {
builder.append(t).append(cement);
}
builder.delete(builder.length() - cement.length(), builder.length());
return builder.toString();
}
公共类ArrayToString {
公共静态void main(String [] args) { String [] strArray = new String [] {“ Java”,“ PHP”,“ .NET”,“ PERL”,“ C”,“ COBOL”};String newString = Arrays.toString(strArray); newString = newString.substring(1, newString.length()-1); System.out.println("New New String: " + newString); } }
String[] strings = new String[25000];
for (int i = 0; i < 25000; i++) strings[i] = '1234567';
String result;
result = "";
for (String s : strings) result += s;
//linear +: 5s
result = "";
for (String s : strings) result = result.concat(s);
//linear .concat: 2.5s
result = String.join("", strings);
//Java 8 .join: 3ms
Public String join(String delimiter, String[] s)
{
int ls = s.length;
switch (ls)
{
case 0: return "";
case 1: return s[0];
case 2: return s[0].concat(delimiter).concat(s[1]);
default:
int l1 = ls / 2;
String[] s1 = Arrays.copyOfRange(s, 0, l1);
String[] s2 = Arrays.copyOfRange(s, l1, ls);
return join(delimiter, s1).concat(delimiter).concat(join(delimiter, s2));
}
}
result = join("", strings);
// Divide&Conquer join: 7ms
如果您没有选择而是使用Java 6或7,则应使用Divide&Conquer连接。
您需要从arrayList产生字符串的代码,
Iterate through all elements in list and add it to your String result
您可以通过2种方式执行此操作:将String用作结果或StringBuffer / StringBuilder。
例:
String result = "";
for (String s : list) {
result += s;
}
...但是由于性能原因,这不是一个好习惯。最好使用StringBuffer(线程安全)或StringBuilder,它们更适合添加字符串
使用Apache Commons的StringUtils库的join方法。
String[] stringArray = {"a","b","c"};
StringUtils.join(stringArray, ",");
如果您知道数组有多少元素,一种简单的方法是:
String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3];