Java:PHP的join()等数组的函数?

时间:2009-10-04 02:27:28

标签: java php arrays join

我想用胶水字符串加入String[]。这有功能吗?

22 个答案:

答案 0 :(得分:307)

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

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

生成:

Hello, World, !

否则,Apache Commons Lang有一个StringUtils类,其join函数会将数组连接在一起,形成String

例如:

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

生成以下String

Hello, World, !

答案 1 :(得分:71)

如果您正在寻找在Android中使用的内容,那就是:

String android.text.TextUtils.join(CharSequence delimiter, Object[] tokens)

例如:

String joined = TextUtils.join(";", MyStringArray);

答案 2 :(得分:55)

在Java 8中,您可以使用

1)Stream API:

String[] a = new String[] {"a", "b", "c"};
String result = Arrays.stream(a).collect(Collectors.joining(", "));

2)新的String.join方法:https://stackoverflow.com/a/21756398/466677

3)java.util.StringJoiner类:http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html

答案 3 :(得分:52)

您可以在大约十行代码中轻松编写这样的函数:

String combine(String[] s, String glue)
{
  int k = s.length;
  if ( k == 0 )
  {
    return null;
  }
  StringBuilder out = new StringBuilder();
  out.append( s[0] );
  for ( int x=1; x < k; ++x )
  {
    out.append(glue).append(s[x]);
  }
  return out.toString();
}

答案 4 :(得分:25)

一个小mod而不是使用substring():

//join(String array,delimiter)
public static String join(String r[],String d)
{
        if (r.length == 0) return "";
        StringBuilder sb = new StringBuilder();
        int i;
        for(i=0;i<r.length-1;i++){
            sb.append(r[i]);
            sb.append(d);
        }
        sb.append(r[i]);
        return sb.toString();
}

答案 5 :(得分:18)

与最近的许多问题一样,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, !"

答案 6 :(得分:14)

Google guava的图书馆也有this kind of capability。您也可以从API中看到String []示例。

如api中所述,请注意构建器方法的不变性。

它可以接受一个对象数组,因此它可以在你的情况下工作。在我以前的经验中,我尝试加入一个可迭代的Stack,它工作正常。

来自我的样本:

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

打印出:|i am a coder|

答案 7 :(得分:9)

假设:

String[] a = new String[] { "Hello", "World", "!" };

然后作为coobird答案的替代方案,胶水是“,”:

Arrays.asList(a).toString().replaceAll("^\\[|\\]$", "")

或者用不同的字符串连接,例如“&amp; amp;”。

Arrays.asList(a).toString().replaceAll(", ", " &amp; ").replaceAll("^\\[|\\]$", "")

然而......只有当你知道数组或列表中的值不包含字符串“,”时,这个才有效。

答案 8 :(得分:9)

如果您使用Spring Framework,那么您拥有StringUtils类:

import static org.springframework.util.StringUtils.arrayToDelimitedString;

arrayToDelimitedString(new String[] {"A", "B", "C"}, "\n");

答案 9 :(得分:8)

不是核心,不是。搜索“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();
}

答案 10 :(得分:6)

如果您已在此处寻找快速的数据到字符串转换,请尝试Arrays.toString()

  

创建传递的Object[]的String表示形式。结果是   括号("[]")包围,每个元素都转换为String   通过String.valueOf(Object)并以", "分隔。如果数组是   null,然后返回"null"

答案 11 :(得分:5)

仅仅为“我是最短的”挑战,这里是地雷;)

<强>迭代:

public static String join(String s, Object... a) {
    StringBuilder o = new StringBuilder();
    for (Iterator<Object> i = Arrays.asList(a).iterator(); i.hasNext();)
        o.append(i.next()).append(i.hasNext() ? s : "");
    return o.toString();
}

<强>递归:

public static String join(String s, Object... a) {
    return a.length == 0 ? "" : a[0] + (a.length == 1 ? "" : s + join(s, Arrays.copyOfRange(a, 1, a.length)));
}

答案 12 :(得分:4)

我所知道的没有任何内置。

Apache Commons Lang有一个名为StringUtils的类,其中包含许多连接函数。

答案 13 :(得分:4)

我就是这样做的。

private String join(String[] input, String delimiter)
{
    StringBuilder sb = new StringBuilder();
    for(String value : input)
    {
        sb.append(value);
        sb.append(delimiter);
    }
    int length = sb.length();
    if(length > 0)
    {
        // Remove the extra delimiter
        sb.setLength(length - delimiter.length());
    }
    return sb.toString();
}

答案 14 :(得分:2)

类似的替代

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

答案 15 :(得分:2)

我的旋转。

public static String join(Object[] objects, String delimiter) {
  if (objects.length == 0) {
    return "";
  }
  int capacityGuess = (objects.length * objects[0].toString().length())
      + ((objects.length - 1) * delimiter.length());
  StringBuilder ret = new StringBuilder(capacityGuess);
  ret.append(objects[0]);
  for (int i = 1; i < objects.length; i++) {
    ret.append(delimiter);
    ret.append(objects[i]);
  }
  return ret.toString();
}

public static String join(Object... objects) {
  return join(objects, "");
}

答案 16 :(得分:1)

你喜欢我使用String类方法的3行方式吗?

static String join(String glue, String[] array) {
    String line = "";
    for (String s : array) line += s + glue;
    return (array.length == 0) ? line : line.substring(0, line.length() - glue.length());
}

答案 17 :(得分:0)

从“str1”,“str2”,“”获取“str1,str2”:

pom.xml

您还可以添加额外的空检查

答案 18 :(得分:0)

如果您使用的是功能性Java库,并且出于某种原因无法使用Java 8中的Streams(使用Android + Retrolambda插件时可能就是这种情况),这里有一个功能性解决方案:

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

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

答案 19 :(得分:-1)

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

答案 20 :(得分:-2)

  

我大部分时间都使用简单的速记技术..

String op = new String;
for (int i : is) 
{
    op += candidatesArr[i-1]+",";
}
op = op.substring(0, op.length()-1);

答案 21 :(得分:-3)

java.util.Arrays有一个'asList'方法。与java.util.List / ArrayList 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]);
}