将字符串数组转换为Java中的字符串


241

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


什么样的数组?字符串数组?
2011年

2
array.toString()?更加详细一些。
Stan Kurilin

1
@Princeyesuraj,正式答案由adarshr提供。如果需要自己的分隔符,则可以尝试JoeSlav的答案,如果没有线程问题,可以使用StringBuilder而不是StringBuffer来提高效率。克罗克的回答很好,但我认为这有点过分了。
但丁五月代码,

Answers:


469

如果您只想要数组的“调试样式”转储:

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穿过屋顶,因为创建和丢弃的字符串对象与数组中包含的项一样多。对于小型阵列,您可能不会真正注意到差异,但是对于大型阵列,速度可能会慢几个数量级。


13
感谢您解释为什么StringBuilder在追加方面优于+ =。
Nicholas Miller

5
如果您在幕后使用+ =,Java会将其转换为使用StringBuilder。
Javamann 2015年

6
@matteo,您必须使用,Arrays.toString(yourArray);但我想您使用过yourArray.toString();
Dzarafata

5
从Java开始,1.8您还可以使用String::join,而不是for循环。String.join("", arr);
乔恩·弗妮

2
Android开发人员可以使用String结果= TextUtils.join(“,”,list); stackoverflow.com/questions/33802971/…–
拉胡尔·霍奇

102

使用Apache Commons StringUtils.join()。它使用一个数组作为参数(并且还有IterableIterator参数的重载),并调用toString()每个元素(如果不为null)以获取每个元素的字符串表示形式。然后,将每个元素的字符串表示形式连接成一个字符串,并在指定之间使用分隔符:

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

产生:

a-b-1

1
次要修补:joinedString = StringUtils.join(new Object [] {“ a”,“ b”,“ 1”},“-”);
2012年

35

我喜欢为此使用Google的Guava Joiner,例如:

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

将产生与以下相同的字符串:

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

预计到达时间:Java 8现在具有类似的支持:

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

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


10
但是,如果我们忠于情节,那null将是“他的名字不能被提及的人” :-)
Stephen C

22
如果您很勇敢:;-)Joiner.on(", ").useForNull("Voldemort").join("Harry", null, "Ron", "Hermione");
富有的

使用Java-8String.join(", ", "Harry", null, "Ron", "Hermione").replaceAll("null", "Voldermart");
Cjo

13

给定一个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();

23
StringBuffer很旧,请改用StringBuilder,它不需要在一个线程中使用同步。
詹森S

13

从Java 8开始,我认为最简单的方法是:

    String[] array = { "cat", "mouse" };
    String delimiter = "";
    String result = String.join(delimiter, array);

这样,您可以选择任意定界符。


10

尝试使用Arrays.deepToString方法。

返回指定数组的“深层内容”的字符串表示形式。如果数组包含其他数组作为元素,则字符串表示形式包含其内容,依此类推。此方法用于将多维数组转换为字符串


如果您不需要太多控制,我相信这是最简单的解决方案,因为您不需要第三方库。这是一个示例:System.out.println(Arrays.deepToString(args));
neves'Mar 3''16

7

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

然后告诉我们您想要的格式。否则,我们无法猜测您的想法。
詹森S

3

以下是数组到字符串转换的示例。

    公共类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);
    }
}


1
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连接。


0

您需要从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,它们更适合添加字符串



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

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

System.out.print(s);

1
您的答案与smas基本相同;只是稍微复杂一点;因此肯定不是“最容易的”之一。此外,Arrays.toString()更加容易。
GhostCat

-22

如果您知道数组有多少元素,一种简单的方法是:

String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3]; 

10
这在现实世界中几乎不适用,并且显示了一些不良的编程习惯。
2013年

3
取得-50个底片可能是很棒的金牌
Pablo Cegarra
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.