在Java中将String[]转换为逗号分隔的字符串

132

我有一个String[]数组

String[] name = {"amit", "rahul", "surya"};

我想在SQL查询中将名称作为参数发送到IN子句内,那么如何转换成格式?

'amit','rahul','surya'

20
String[] name = {"O'Neill"}; 意思是定义了一个字符串数组,其中只有一个元素,该元素的值为 "O'Neill"。 - Bart Kiers
请将已接受的答案更改为得票最高的答案。 - Roland
24个回答

244
要么自己编写一个简单的方法,要么使用现有的各种实用程序。
个人推荐使用apache StringUtils (StringUtils.join)
编辑:在Java 8中,您根本不需要这个了:
String joined = String.join(",", name);

4
没错!你甚至可以定义自己的分隔符:StringUtils.join(names, ','); - insanity
6
String list = "'" + StringUtils.join(names,"','") + "'"; 这段代码可以为 SQL 请求提供所需的单引号。其中,names 是需要拼接的字符串列表。 - haysclark
对于Android:TextUtils.join(",", stringArrayOfEmails) - Pratik Butani

89

67

简单易懂:但需要Java8!

String result = String.join(",", names);

47
StringBuilder sb = new StringBuilder();
for (String n : name) { 
    if (sb.length() > 0) sb.append(',');
    sb.append("'").append(n).append("'");
}
return sb.toString();

1
@Bmoeller 你试过使用 TextUtils.join(...) 吗?我猜一行代码甚至比五行更好更简单。 - Eugene Brusov

31
if (name.length > 0) {
    StringBuilder nameBuilder = new StringBuilder();

    for (String n : name) {
        nameBuilder.append("'").append(n.replace("'", "\\'")).append("',");
        // can also do the following
        // nameBuilder.append("'").append(n.replace("'", "''")).append("',");
    }

    nameBuilder.deleteCharAt(nameBuilder.length() - 1);

    return nameBuilder.toString();
} else {
    return "";
}

10
那么我本来会写一堆支票。我只是在解释概念,而不是给出完美的例子。 - Nico Huysamen
3
再说一遍,概念......感谢你的反对票。但是没关系,我已经修复了它。 - Nico Huysamen
字符串是不可变的。你的 replaceAll 调用没有任何作用。即使你将名称设置为新字符串,它仍然不会有任何作用,因为 \'' 的转义序列。 - user1181445
7
为什么要写那么多源代码行,如果可以简单地使用 String.join(...)TextUtils.join(...) 呢? - Eugene Brusov
2
@EugeneBrusov 我猜你发表的答案是在2011年发布Java 8之前的。 ;) - Nico Huysamen
显示剩余4条评论

29

您还可以使用 org.apache.commons.lang.StringUtils API 将Java中的字符串数组组成逗号分隔的结果。

StringUtils.join(strArr,",");


9
如果您已经将Spring Framework作为依赖项,那么您也可以使用非常简单的util方法:
org.springframework.util.StringUtils.arrayToCommaDelimitedString(String[] array)

7
您可以使用Guava库来简化它:
String[] name = {"amit", "rahul", "surya"};
String str = "'" + Joiner.on(",").skipNulls().join(name)
    .replace(",", "','") + "'";

我该如何使用Guava库,使输出为:"amit,rahul,surya"? - Compaq LE2202x

6

Java 8之前的解决方案扩展

String result = String.join(",", name);

如果您需要数组值的前缀和/或后缀
 StringJoiner joiner = new StringJoiner(",");
 for (CharSequence cs: name) {
     joiner.add("'" + cs + "'");
 }
 return joiner.toString();

或者简单方法概念

  public static String genInValues(String delimiter, String prefix, String suffix, String[] name) {
    StringJoiner joiner = new StringJoiner(delimiter);
    for (CharSequence cs: name) {
      joiner.add(prefix + cs + suffix);
    }
    return joiner.toString();
  }

例如

For Oracle i need "id in (1,2,3,4,5)" 
then use genInValues(",", "", "", name);

But for Postgres i need "id in (values (1),(2),(3),(4),(5))"
then use genInValues(",", "(", ")", name);

5
使用StringBuilder并迭代遍历您的String[],将每个String附加到其中:
public static String convert(String[] name) { 
    StringBuilder sb = new StringBuilder();
    for (String st : name) { 
        sb.append('\'').append(st).append('\'').append(',');
    }
    if (name.length != 0) sb.deleteCharAt(sb.length()-1);
    return sb.toString();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接