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

Dee*_*mar 100 java

我有一个 String[]

String[] name = {"amit", "rahul", "surya"};
Run Code Online (Sandbox Code Playgroud)

我想在IN子句中的sql查询中发送名称作为参数,所以我如何转换为格式

'amit','rahul','surya'
Run Code Online (Sandbox Code Playgroud)

Joe*_*ckx 197

要么自己编写一个简单的方法,要么使用其中的各种实用程序.

我个人使用apache StringUtils(StringUtils.join)

编辑:在Java 8中,您根本不再需要它:

String joined = String.join(",", name);
Run Code Online (Sandbox Code Playgroud)

  • `String list ="'"+ StringUtils.join(names,"','")+"'";`这将为您提供SQL请求所需的单引号. (4认同)
  • 究竟!您甚至可以定义自己的分隔符:`StringUtils.join(names,',');` (3认同)

Kei*_*oth 78

Android开发人员可能正在寻找TextUtils.join

Android文档:http: //developer.android.com/reference/android/text/TextUtils.html

码:

String[] name = {"amit", "rahul", "surya"};
TextUtils.join(",",name)
Run Code Online (Sandbox Code Playgroud)


NPE*_*NPE 47

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


Chr*_*rry 47

好又简单:但需要java8!

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


Nic*_*men 30

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 "";
}
Run Code Online (Sandbox Code Playgroud)

  • 然后我会写一堆支票.我只是解释这个概念,而不是给出全部保存的例子. (10认同)
  • 哦,如果你只需要使用`String.join(...)`或`TextUtils.join(...)`,为什么需要编写这么多的源代码? (6认同)
  • 再次,概念......并感谢投票.但你去了,修好了. (3认同)
  • @EugeneBrusov 我要去猜测,因为答案早在 Java 8 发布之前就已于 2011 年发布;) (2认同)

小智 27

您还可以使用org.apache.commons.lang.StringUtilsAPI在Java中与字符串数组形成逗号分隔结果.

StringUtils.join(strArr,",");


Nic*_*een 9

如果您已经将Spring Framework作为依赖项,那么您还可以使用非常简单的util方法:

org.springframework.util.StringUtils.arrayToCommaDelimitedString(String[] array)
Run Code Online (Sandbox Code Playgroud)


acv*_*vcu 7

您还可以使用Guava库简化它:

String[] name = {"amit", "rahul", "surya"};
String str = "'" + Joiner.on(",").skipNulls().join(name)
    .replace(",", "','") + "'";
Run Code Online (Sandbox Code Playgroud)


小智 6

对先前 Java 8 解决方案的扩展

String result = String.join(",", name);
Run Code Online (Sandbox Code Playgroud)

如果您需要数组值的前缀或/和后缀

 StringJoiner joiner = new StringJoiner(",");
 for (CharSequence cs: name) {
     joiner.add("'" + cs + "'");
 }
 return joiner.toString();
Run Code Online (Sandbox Code Playgroud)

或者简单的方法概念

  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();
  }
Run Code Online (Sandbox Code Playgroud)

例如

For Oracle i need "id in (1,2,3,4,5)" 
then use genInValues(",", "", "", name);
Run Code Online (Sandbox Code Playgroud)
But for Postgres i need "id in (values (1),(2),(3),(4),(5))"
then use genInValues(",", "(", ")", name);
Run Code Online (Sandbox Code Playgroud)


ami*_*mit 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();
}
Run Code Online (Sandbox Code Playgroud)