我想加入一个字符串[]与胶水字符串。有这个函数吗?


当前回答

如前所述,从Java 8开始,类StringJoiner也是一个可用的选项:

@NotNull
String stringArrayToCsv(@NotNull String[] data) {
    if (data.length == 0) {return "";}
    StringJoiner joiner = new StringJoiner(", ");
    Iterator<String> itr = Arrays.stream(data).iterator();
    while (itr.hasNext()) {joiner.add(itr.next());}
    return joiner.toString();
}

然而,传统的String.join()的导入和代码更少:

@NotNull
String stringArrayToCsv(@NotNull String[] data) {
    if (data.length == 0) {return "";}
    return String.join(", ", data);
}

其他回答

从Java8开始,可以使用String.join()。

String.join(", ", new String[]{"Hello", "World", "!"})

生成:

Hello, World, !

另外,Apache Commons Lang有一个StringUtils类,它有一个连接函数,可以将数组连接在一起形成一个String。

例如:

StringUtils.join(new String[] {"Hello", "World", "!"}, ", ")

生成以下字符串:

Hello, World, !

如果您正在寻找一个快速的数组到字符串转换,请尝试Arrays.toString()。

创建传递对象[]的String表示形式。结果是 用括号括起来(“[]”),每个元素都被转换为一个String 通过String.valueOf(Object)并以“,”分隔。如果数组是 Null,则返回" Null "。

我使用StringBuilder这样做:

public static String join(String[] source, String delimiter) {
    if ((null == source) || (source.length < 1)) {
        return "";
    }

    StringBuilder stringbuilder = new StringBuilder();
    for (String s : source) {
        stringbuilder.append(s + delimiter);
    }
    return stringbuilder.toString();
} // join((String[], String)

谷歌番石榴的库也有这种能力。你也可以从API中看到String[]的例子。

正如api中已经描述的,要注意构建器方法的不可变性。

它可以接受一个对象数组,所以它在你的情况下是可行的。在我以前的经验中,我尝试加入一个堆栈,这是一个可迭代的,它工作得很好。

我的例子:

Deque<String> nameStack = new ArrayDeque<>();
nameStack.push("a coder");
nameStack.push("i am");
System.out.println("|" + Joiner.on(' ').skipNulls().join(nameStack) + "|");

打印出来:|我是一个编码员|

类似的替代方案

/**
 * @param delimiter 
 * @param inStr
 * @return String
 */
public static String join(String delimiter, String... inStr)
{
    StringBuilder sb = new StringBuilder();
    if (inStr.length > 0)
    {
        sb.append(inStr[0]);
        for (int i = 1; i < inStr.length; i++)
        {
            sb.append(delimiter);                   
            sb.append(inStr[i]);
        }
    }
    return sb.toString();
}