【问题标题】:Adding comma separated strings to an ArrayList and vice versa将逗号分隔的字符串添加到 ArrayList,反之亦然
【发布时间】:2011-08-31 02:38:37
【问题描述】:

如何将逗号分隔的字符串添加到 ArrayList?我的字符串“returnedItems”可以包含 1 或 20 个我想添加到 ArrayList“selItemArrayList”中的项目。

填充 ArrayList 后,我​​想稍后对其进行迭代并将项目格式化为逗号分隔的字符串,项目之间没有空格。

【问题讨论】:

  • returnItems 包含哪些数据?像“test,test2,test567”之类的?
  • 嗨弗拉基米尔,是的,它由“胡萝卜、洋葱、大蒜”等组成。
  • 但请记住,如果字符串本身可以包含逗号,事情会变得相当复杂。 (见下面我的回答)

标签: java arraylist csv


【解决方案1】:
String csv = "Apple, Google, Samsung";

第一步:将逗号分隔的字符串转换为字符串数组

String[] elements = csv.split(",");

第二步:将字符串数组转换为字符串列表

 List<String> fixedLenghtList = Arrays.asList(elements);

第三步:将固定列表复制到 ArrayList ArrayList listOfString = new ArrayList(fixedLenghtList);

System.out.println("list from comma separated String : " + listOfString);

System.out.println("ArrayList 的大小:" + listOfString.size()); 输出:

list of comma separated String : [Apple, Google, Samsung]


size of ArrayList : 3

【讨论】:

    【解决方案2】:

    如果字符串本身可以包含逗号,事情就会变得更加复杂。与其自己动手,不如考虑使用众多开源 CSV 解析器之一。虽然它们旨在读取文件,但至少 OpenCSV 也会解析您提供的单个字符串。

    【讨论】:

      【解决方案3】:
      String returnedItems = "a,b,c";
      List<String> sellItems = Arrays.asList(returnedItems.split(","));
      

      现在遍历列表并将每个项目附加到 StringBuilder:

      StringBuilder sb = new StringBuilder();
      for(String item: sellItems){
          if(sb.length() > 0){
              sb.append(',');
          }
          sb.append(item);
      }
      String result = sb.toString();
      

      【讨论】:

      • 从 Java 8 开始,您可以加入: String joined = String.join(",", sellItems);
      【解决方案4】:
      import com.google.common.base.*;
      
      Iterable<String> items = Splitter.on(",").omitEmptyStrings()
                                       .split("Mango,Apple,Guava");
      
      // Join again!
      String itemsString = Joiner.join(",").join(items);
      

      【讨论】:

        【解决方案5】:
        String list = "one, two, three, four";
        String[] items = list.split("\\p{Punct}");
        List<String> aList = Arrays.asList(items);
        System.out.println("aList = " + aList);
        StringBuilder formatted = new StringBuilder();
        
        for (int i = 0; i < items.length; i++)
        {
            formatted.append(items[i].trim());
            if (i < items.length - 1) formatted.append(',');
        }
        
        System.out.println("formatted = " + formatted.toString());
        

        【讨论】:

          【解决方案6】:

          这会有所帮助:

          for (String s : returnedItems.split(",")) {
              selItemArrayList.add(s.trim());
          }
          
          //Shorter and sweeter
          String [] strings = returnedItems.split(",");
          selItemArrayList = Arrays.asList(strings);
          
          //The reverse....
          
          StringBuilder sb = new StringBuilder();
          Iterator<String> iter = selItemArrayList.iterator();
          while (iter.hasNext()) {
              if (sb.length() > 0) 
                  sb.append(",");
              sb.append(iter.next());
          }
          
          returnedItems = sb.toString();
          

          【讨论】:

            【解决方案7】:

            splitasList 做到了:

            String [] strings = returnedItems.split(",");
            List<String> list = Arrays.asList(strings);
            

            【讨论】:

              【解决方案8】:

              简单的单行:

              selItemArrayList.addAll(Arrays.asList(returnedItems.split("\\s*,\\s*")));
              

              当然,如果您的条目中有逗号,那会更复杂。

              【讨论】:

              • 太棒了!当我将列表存储为字符串时,列表中的 aList.toString() 元素用逗号分隔,逗号后有一个空格。 Whit this RegExp on Split 我可以再次列出正确的项目!
              【解决方案9】:

              单线一直很受欢迎:

              Collections.addAll(arrayList, input.split(","));
              

              【讨论】:

                【解决方案10】:

                您可以在 String 上使用 split() 方法将 String 转换为可以循环遍历的数组。

                虽然您可以跳过循环和使用正则表达式进行解析,以使用字符串上的 replaceAll() 删除空格。

                【讨论】:

                  【解决方案11】:

                  如果个别项目没有被引用,那么:

                   QString str = "a,,b,c";
                  
                   QStringList list1 = str.split(",");
                   // list1: [ "a", "", "b", "c" ]
                  

                  如果项目被引用,我会添加“[]”字符并使用 JSON 解析器。

                  【讨论】:

                  • 糟糕!那是Qt。但我确信在 Java 中也有等价物。
                  猜你喜欢
                  • 2014-04-16
                  • 1970-01-01
                  • 2021-09-30
                  • 1970-01-01
                  • 2012-03-06
                  • 1970-01-01
                  • 2015-12-09
                  • 2014-11-18
                  • 1970-01-01
                  相关资源
                  最近更新 更多