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


109

我有一个 String[]

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

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

'amit','rahul','surya'

18
怎么样String[] name = {"O'Neill"};
巴特煮布锅

Answers:


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 2011年

3
再次,概念...感谢您的不赞成投票。但是,您可以修复它。
Nico Huysamen 2011年

谢谢哥们,您可以节省我的时间,但是如果您不介意的话,也可以给出@Bart Kiers的答案,因为我可能会遇到这种情况,并且我是PLC编程的新手
Deepak Kumar

7
哦,如果您只需使用String.join(...)或,为什么还要编写这么多源代码行TextUtils.join(...)
尤金·布鲁索夫

2
@EugeneBrusov我要去猜测一下,因为答案早在Java 8发行之前于2011年发布;)
Nico Huysamen

211

您可以自己编写一个简单的方法,也可以使用其中的各种实用程序之一。

我个人使用的是Apache StringUtils(StringUtils.join

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

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

3
究竟!您甚至可以定义自己的定界符:StringUtils.join(names,',');
疯狂2014年

5
String list = "'" + StringUtils.join(names,"','") + "'";这将为您提供SQL请求所需的单引号。
haysclark '16

对于Android:TextUtils.join(",", stringArrayOfEmails)
Pratik Butani



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

27

您还可以使用org.apache.commons.lang.StringUtilsAPI从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(",", "','") + "'";

如何使用番石榴图书馆,输出为:"amit,rahul,surya"
Compaq LE2202x 2014年

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

4

您可以使用一行代码来做到这一点:

Arrays.toString(strings).replaceAll("[\\[.\\].\\s+]", "");

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


public static String arrayToString(String array[])
{
    if (array.length == 0) return "";
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < array.length; ++i)
    {
        sb.append(",'").append(array[i]).append("'");
    }
    return sb.substring(1);
}

2
你可能是说substring(1),但是如果array.length == 0呢?
巴特·基尔斯

2

我用这个

public static String convertToCommaSeparated(String[] strings) {
    StringBuffer sb = new StringBuffer("");
    for (int i = 0; strings != null && i < strings.length; i++) {
        sb.append(strings[i]);
        if (i < strings.length - 1) {
            sb.append(',');
        }
    }
    return sb.toString();
}

1

USE StringUtils.join功能:例如

String myCsvString = StringUtils.join(myList, ",")

1
为什么要发布以前多次发布的答案?
Charles Goodwin

1
String[] paramIdIdList={"P001","P002","P003"};

StringBuilder builder = new StringBuilder();
            for(String paramId : paramIdIdList) {
                builder.append(paramId+",");
            }
            builder.deleteCharAt(builder.length() -1);
            String paramIds = builder.toString();
System.Out.Println(paramIds );

请添加代码说明。
Hille

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

在您的答案中,因为正确知道有一些代码。一无所有,但无济于事。
Hille

1

可能会出现诱人且“酷”的代码,请不要使用foldreduce字符串在字符串的大集合上使用,因为这些字符串会遭受字符串连接问题的困扰

String[] strings = { "foo", "bar", "baz" };
Optional<String> result = Arrays.stream(strings)
        .reduce((a, b) -> String.format("%s,%s", a, b));
System.out.println(result.get());

取而代之的是,按照其他答案,String.join()如果您已经有一个集合,则使用,StringBuilder如果没有,则使用。


0
String newNameList=null;

 for(int i = name.length;i>=0;i--){
    if(newNameList==null){
        newNameList = "\'" + name[name.length - i] + "\'";
    }
    else{
        newNameList += ",\'" + name[name.length - i] + "\'";
    }
}

0

您可能还不想通过这种简单的操作来生成StringBuilder。请注意,为了内容一致,我已将数组的名称名称更改为名称

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

String namesString = "";
int delimeters = (names.size() - 1);
for (String name : names)
    namesString += (delimeters-- > 0) ? "'" + name + "'," : "'" + name + "'";

0

如果您不太在乎for()循环的垂直间距,则两行代码(不包括声明;'finalstring'最初应声明为一个空字符串):

for (int i = 0; i<string_array.length; i++) {finalstring += string_array[i]+",";}
finalstring = finalstring.substring(0,finalstring.length()-1);

两行,您完成了。:)


0

这是使用以下方法的实用程序方法,用于拆分数组并放置自定义定界符:

String.replace(String,String)
Arrays.toString(Object[])

这里是 :

public static String toString(String delimiter, Object[]array){
    String s = "";

    // split array
    if (array != null && array.length > 0) {
        s = Arrays.toString(array).replace("[", "").replace("]", "");
    }

    // place delimiter (notice the space in ", ")
    if(delimiter != null){
        s = s.replace(", ", delimiter);
    }

    return s;
}

更改第二个参数类型以适合您的数组类型


0

这将是一种优化的方式

StringBuilder sb = new StringBuilder();
for (String n : arr) { 
    sb.append("'").append(n).append("',");
}
if(sb.length()>0)
    sb.setLength(sbDiscrep.length()-1);
return sb.toString();

0

先前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);

-1

这对我有帮助!!!

private static String convertArrayToString(String [] strArray) {
            StringBuilder builder = new StringBuilder();
            for(int i = 0; i<= strArray.length-1; i++) {
                if(i == strArray.length-1) {
                    builder.append("'"+strArray[i]+"'");
                }else {
                    builder.append("'"+strArray[i]+"'"+",");
                }
            }
            return builder.toString();
        }

3
请为您的答案提供一些背景信息。
马修·布鲁彻
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.