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


当前回答

如果你正在使用函数式Java库,并且由于某种原因不能使用Java 8中的流(当使用Android + Retrolambda插件时可能会出现这种情况),这里有一个函数式解决方案:

String joinWithSeparator(List<String> items, String separator) {
    return items
            .bind(id -> list(separator, id))
            .drop(1)
            .foldLeft(
                    (result, item) -> result + item,
                    ""
            );
}

注意,这不是最有效的方法,但它确实适用于小列表。

其他回答

arrays有一个“asList”方法。与java.util一起使用。列表/数组列表API,这给了你所有你需要的:

private static String[] join(String[] array1, String[] array2) {

    List<String> list = new ArrayList<String>(Arrays.asList(array1));
    list.addAll(Arrays.asList(array2));
    return list.toArray(new String[0]);
}

不是在核心,不是。搜索“java array join string glue”会给你一些关于如何实现这一点的代码片段。

e.g.

public static String join(Collection s, String delimiter) {
    StringBuffer buffer = new StringBuffer();
    Iterator iter = s.iterator();
    while (iter.hasNext()) {
        buffer.append(iter.next());
        if (iter.hasNext()) {
            buffer.append(delimiter);
        }
    }
    return buffer.toString();
}

类似的替代方案

/**
 * @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();
}

就像最近的许多问题一样,Java 8来拯救:


Java 8在Java .lang. string中添加了一个新的静态方法,它的功能正是你想要的:

public static String join(CharSequence delimeter, CharSequence... elements);

使用它:

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

结果:

"Hello, World, !"

我使用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)