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

我需要将字符串数组转换为字符串的Java代码。

710912 次浏览

尝试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();
}

使用Apache commons StringUtils.join()。它接受一个数组作为参数(也有IterableIterator参数的重载),并在每个元素上调用toString()(如果它不为空)来获得每个元素的字符串表示形式。然后,每个元素的字符串表示形式被连接成一个字符串,如果指定了分隔符,则中间有分隔符:

String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);

生产:

a-b-1

你可以这样做,给定一个基元类型的数组a:

StringBuffer result = new StringBuffer();
for (int i = 0; i < a.length; i++) {
result.append( a[i] );
//result.append( optional separator );
}
String mynewstring = result.toString();

你需要从数组列表中生成字符串的代码,

Iterate through all elements in list and add it to your String result

你可以用两种方式:使用String作为结果或使用StringBuffer/StringBuilder。

例子:

String result = "";
for (String s : list) {
result += s;
}

...但由于性能原因,这不是一个好的实践。更好的方法是使用StringBuffer(线程安全)或StringBuilder,它们更适合添加字符串

我喜欢使用谷歌的番石榴乔伊纳来实现这一点,例如:

Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");

将产生与以下相同的String:

new String("Harry, Ron, Hermione");

ETA: Java 8现在也有类似的支持:

String.join(", ", "Harry", "Ron", "Hermione");

不能看到跳过空值的支持,但这很容易解决。

Java 8 +

使用String.join():

String str = String.join(",", arr);

注意,arr也可以是任何Iterable(例如列表),而不仅仅是数组。

如果你有Stream,你可以使用连接收集器:

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();

或者,如果你只是想要一个“;debug-style"转储数组:

String str = Arrays.toString(arr);

注意,如果你是真的遗留(Java 1.4及更早版本),你需要用StringBuffer替换那里的StringBuilder

安卓

使用TextUtils.join():

String str = TextUtils.join(",", arr);

一般的笔记

您可以根据字符串之间的字符(如果有的话)来修改上面的所有示例。

使用一个字符串,并在循环中添加+=,就像这里显示的一些答案一样。这将使GC飙升,因为创建和丢弃的字符串对象与数组中的项目一样多。对于小型数组,您可能不会真正注意到差异,但对于大型数组,它可能会慢几个数量级。

试试Arrays.deepToString方法。

返回指定对象的“深层内容”的字符串表示形式 数组中。如果数组包含其他数组作为元素,则字符串 表示法包含它们的内容,等等。这个方法是 用于将多维数组转换为字符串

如果你知道数组有多少元素,一个简单的方法是这样做:

String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3];
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或Java 7,那么你应该使用Divide&Conquer join。

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);

这样您就可以选择任意的分隔符。

String array[]={"one","two"};
String s="";


for(int i=0;i<array.length;i++)
{
s=s+array[i];
}


System.out.print(s);

使用Apache Commons的stringutil的图书馆的join方法。

String[] stringArray = {"a","b","c"};
StringUtils.join(stringArray, ",");
当我们使用stream时,我们有更大的灵活性,比如
地图——比;将任意数组对象转换为toString
过滤——比;当它为空时移除
加入——比;添加连接字符

    //Deduplicate the comma character in the input string
String[] splits = input.split("\\s*,\\s*");
return Arrays.stream(splits).filter(StringUtils::isNotBlank).collect(Collectors.joining(", "));