【问题标题】:Convert String[] to comma separated string in java在java中将String []转换为逗号分隔的字符串
【发布时间】:2011-10-01 03:59:35
【问题描述】:

我有一个String[]

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

我想在 IN 子句中的 sql 查询中将名称作为参数发送 那么如何转换成格式

'amit','rahul','surya'

【问题讨论】:

  • String[] name = {"O'Neill"};怎么样
  • 请将接受的答案更改为票数最高的答案

标签: java


【解决方案1】:

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

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

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

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

【讨论】:

  • 没错!您甚至可以定义自己的分隔符:StringUtils.join(names,',');
  • String list = "'" + StringUtils.join(names,"','") + "'"; 这将为您提供 SQL 请求所需的单引号。
  • 安卓版:TextUtils.join(",", stringArrayOfEmails)
【解决方案2】:

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

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

代码:

String[] name = {"amit", "rahul", "surya"};
TextUtils.join(",",name)

【讨论】:

    【解决方案3】:

    又好又简单:但需要 java8!

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

    【讨论】:

      【解决方案4】:
      StringBuilder sb = new StringBuilder();
      for (String n : name) { 
          if (sb.length() > 0) sb.append(',');
          sb.append("'").append(n).append("'");
      }
      return sb.toString();
      

      【讨论】:

      • @Bmoeller 你试过TextUtils.join(...)吗?我猜一行代码比五行代码更好更简单。
      【解决方案5】:
      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 "";
      }
      

      【讨论】:

      • 那我会写一堆支票。我只是在解释这个概念,而不是给出保存所有的例子。
      • 再次,概念...感谢您的反对。但是你去,修好了。
      • 谢谢哥们,你拯救了我的一天,但如果你不介意你也可以给@Bart Kiers 的答案,因为我可能会遇到这种情况,我是编程新手
      • 哦,如果你可以简单地使用String.join(...)TextUtils.join(...),为什么需要编写这么多源代码行?
      • @EugeneBrusov 我要去猜测一下,因为答案早在 Java 8 发布之前的 2011 年就发布了;)
      【解决方案6】:

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

      StringUtils.join(strArr,",");

      【讨论】:

        【解决方案7】:

        如果你已经有 Spring Framework 作为依赖,你也可以使用非常简单的 util 方法:

        org.springframework.util.StringUtils.arrayToCommaDelimitedString(String[] array)
        

        【讨论】:

          【解决方案8】:

          您还可以使用 Guava 库对其进行简化:

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

          【讨论】:

          • 如何使用 Guava 库,输出为:"amit,rahul,surya"?
          【解决方案9】:

          使用 StringBuilder 并遍历您的 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();
          }
          

          【讨论】:

            【解决方案10】:

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

            【讨论】:

              【解决方案11】:

              你可以用一行代码做到这一点:

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

              【讨论】:

                【解决方案12】:
                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);
                }
                

                【讨论】:

                • 你的意思可能是substring(1),但是如果array.length == 0呢?
                【解决方案13】:

                我用这个

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

                【讨论】:

                  【解决方案14】:

                  使用StringUtils.join函数: 例如。

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

                  【讨论】:

                  • 为什么要发布以前多次发布的答案?
                  【解决方案15】:
                  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 );
                  

                  【讨论】:

                  • 请添加您的代码正在做什么的描述。
                  • 将 String[] 转换为逗号分隔的字符串
                  • 在您的回答中,因为正确知道有一些代码。不多也不少,但它没有帮助。
                  【解决方案16】:

                  尽管代码可能看起来很诱人且“酷”,但不要在大型​​字符串集合上使用 foldreduce,因为它们会受到 string concatenation problem 的影响

                  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

                  【讨论】:

                    【解决方案17】:
                    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] + "\'";
                        }
                    }
                    

                    【讨论】:

                      【解决方案18】:

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

                      String[] names = {"amit", "rahul", "surya"};
                      
                      String namesString = "";
                      int delimeters = (names.size() - 1);
                      for (String name : names)
                          namesString += (delimeters-- > 0) ? "'" + name + "'," : "'" + name + "'";
                      

                      【讨论】:

                        【解决方案19】:

                        两行(不包括声明;'finalstring' 最初应该声明为等于一个空字符串),如果您不太关心垂直间隔 for() 循环:

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

                        两行,你就完成了。 :)

                        【讨论】:

                          【解决方案20】:

                          这里是一个实用方法,用于拆分数组并放置自定义分隔符,使用

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

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

                          【讨论】:

                            【解决方案21】:

                            这将是一种优化的方式

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

                            【讨论】:

                              【解决方案22】:

                              在 java 8 中,对于无字符串数组和无原始对象(Long、Integer、...)

                              List<Long> ids = Arrays.asList(1l, 2l,3l);
                              ids.stream().map(String::valueOf).collect(Collectors.joining(","))))
                              

                              在 java 8 中用于对象数组的特定字段(例如具有 2 个字段颜色和速度的汽车)

                              List<Car> cars= Cars.asList(car1, cars2,car3);
                                  cars.stream().map(Car::getColor).collect(Collectors.joining(","))))
                              

                              mapvalueOf 组合在一起,以获得对象数组的无字符串字段

                              【讨论】:

                                【解决方案23】:

                                这对我有帮助!!!

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

                                【讨论】:

                                • 请为您的回答提供一些背景信息。
                                猜你喜欢
                                • 1970-01-01
                                • 2019-08-08
                                • 1970-01-01
                                • 1970-01-01
                                • 2019-11-18
                                • 2018-08-16
                                • 2013-09-30
                                • 2021-08-21
                                • 2011-11-20
                                相关资源
                                最近更新 更多