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

时间:2011-03-12 15:34:01

标签: java arrays string

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

14 个答案:

答案 0 :(得分:408)

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

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是一个不是线程安全的新类,但因此它在单个线程中具有更好的性能消除了不必要的同步。简而言之,在99%的情况下,你最好使用StringBuilder - 功能明智,两者是相同的。

不要使用字符串,只需附加+ =,就像这里显示的一些答案一样。这会将GC发送到屋顶,因为您正在创建并丢弃与阵列中的项目一样多的字符串对象。对于小型阵列,您可能没有真正注意到这种差异,但对于大型阵列,它可能会慢几个数量级。

答案 1 :(得分:101)

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

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

产地:

a-b-1

答案 2 :(得分:35)

我喜欢使用Google's Guava Joiner,例如:

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

将产生与:

相同的字符串
new String("Harry, Ron, Hermione");

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

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

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

答案 3 :(得分: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();

答案 4 :(得分:12)

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

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

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

答案 5 :(得分:9)

尝试使用Arrays.deepToString方法。

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

答案 6 :(得分: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();
}

答案 7 :(得分:3)

以下是Array to String转换的示例。

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

答案 8 :(得分: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 And; Conquer join。

答案 9 :(得分:0)

您需要从arrayList生成字符串的代码,

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更适合添加字符串

答案 10 :(得分:0)

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

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

System.out.print(s);

答案 11 :(得分:0)

使用Apache Commons&#39; StringUtils library的加入方法。

<?php

namespace Tests;

use Psr\Http\Message\StreamInterface;
use Psr\Http\Message\ResponseInterface;

class Response implements ResponseInterface {

    /**
     *
     * @param StreamInterface $body Message body.
     */
    public function __construct(StreamInterface $body) {
        $this->body = $body;
    }

    /**
     * Gets the body of the message.
     *
     * @return StreamInterface Returns the body as a stream.
     */
    public function getBody() {
        return $this->body;
    }

    public function getHeader($name) {}
    public function getHeaderLine($name) {}
    public function getHeaders() {}
    public function getProtocolVersion() {}
    public function hasHeader($name) {}
    public function withAddedHeader($name, $value) {}
    public function withBody(StreamInterface $body) {}
    public function withHeader($name, $value) {}
    public function withProtocolVersion($version) {}
    public function withoutHeader($name) {}
    public function getReasonPhrase() {}
    public function getStatusCode() {}
    public function withStatus($code, $reasonPhrase = '') {}

}

答案 12 :(得分:0)

当我们使用流时,我们确实有更多的灵活性,比如
映射 --> 将任何数组对象转换为 toString
过滤器 --> 为空时删除
join --> 添加加入字符

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

答案 13 :(得分:-21)

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

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