我需要将字符串数组转换为字符串的Java代码。
当前回答
public class ArrayToString
{
public static 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);
}
}
其他回答
在Java 8中,我认为最简单的方法是:
String[] array = { "cat", "mouse" };
String delimiter = "";
String result = String.join(delimiter, array);
这样您就可以选择任意的分隔符。
Java 8 +
使用String.join ():
String str = String.join(",", arr);
注意,arr也可以是任何Iterable(比如一个列表),而不仅仅是一个数组。
如果你有一个流,你可以使用连接收集器:
Stream.of("a", "b", "c")
.collect(Collectors.joining(","))
遗留(Java 7及更早版本)
StringBuilder builder = new StringBuilder();
for(String s : arr) {
builder.append(s);
}
String str = builder.toString();
或者,如果你只是想要一个“调试风格”的数组转储:
String str = Arrays.toString(arr);
注意,如果你真的是传统的(Java 1.4或更早的版本),你需要用StringBuffer替换那里的StringBuilder。
安卓
使用TextUtils.join ():
String str = TextUtils.join(",", arr);
一般的笔记
您可以根据字符串之间的字符(如果有的话)来修改上面的所有示例。
不要像这里显示的一些答案那样使用字符串并在循环中添加+=。这将使GC飙升,因为创建和丢弃的字符串对象与数组中的项目一样多。对于小型数组,您可能不会真正注意到差异,但对于大型数组,它可能会慢几个数量级。
如果你知道数组有多少元素,一个简单的方法是这样做:
String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3];
试试数组。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();
}
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,那么你应该使用分治连接。