Home Articles

如何将逗号分隔的String转换为ArrayList?

Asked
Viewed 1809 times
441

Java中是否有任何内置方法允许我们将逗号分隔的String转换为某个容器(例如array,List或Vector)?或者我需要为此编写自定义代码?

String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??

23 Answers

  • 865

    您可以使用Guava拆分字符串,并将其转换为ArrayList . 这也适用于空字符串,并返回一个空列表 .

    import com.google.common.base.Splitter;
    import com.google.common.collect.Lists;
    
    String commaSeparated = "item1 , item2 , item3";
    
    // Split string into list, trimming each item and removing empty items
    ArrayList<String> list = Lists.newArrayList(Splitter.on(',').trimResults().omitEmptyStrings().splitToList(commaSeparated));
    System.out.println(list);
    
    list.add("another item");
    System.out.println(list);
    

    输出以下内容:

    [item1, item2, item3]
    [item1, item2, item3, another item]
    
  • 167

    这是另一个将CSV转换为ArrayList的方法:

    String str="string,with,comma";
    ArrayList aList= new ArrayList(Arrays.asList(str.split(",")));
    for(int i=0;i<aList.size();i++)
    {
        System.out.println(" -->"+aList.get(i));
    }
    

    打印你

    • string - > with - >逗号

  • 59
    List commaseperated = new ArrayList();
    String mylist = "item1 , item2 , item3";
    mylist = Arrays.asList(myStr.trim().split(" , "));
    
    // enter code here
    
  • 22

    两个步骤:

    • String [] items = commaSeparated.split(",");

    • List<String> container = Arrays.asList(items);

  • 14
    ArrayList<HashMap<String, String>> mListmain = new ArrayList<HashMap<String, String>>(); 
    String marray[]= mListmain.split(",");
    
  • 13

    以下代码可以帮助您,

    List myList = new ArrayList();
    String myStr = "item1 , item2 , item3";
    myList = Arrays.asList(myStr.split(" , "));
    
  • 13

    使用Splitter类可以获得相同的结果 .

    var list = Splitter.on(",").splitToList(YourStringVariable)
    

    (用kotlin写的)

  • 11

    Convert comma separated String to List

    List<String> items = Arrays.asList(str.split("\\s*,\\s*"));
    

    上面的代码将字符串拆分为定义为: zero or more whitespace, a literal comma, zero or more whitespace 的分隔符,它将单词放入列表中并折叠单词和逗号之间的任何空格 .


    请注意,这只返回一个数组的包装器:你 CANNOT 例如 .remove() 来自结果 List . 对于实际 ArrayList ,您必须进一步使用 new ArrayList<String> .

  • 9

    您可以先使用 String.split(",") 拆分它们,然后使用 Arrays.asList(array) 将返回的字符串 array 转换为 ArrayList

  • 4

    如果一个 List 是OP所说的最终目标,那么已经接受的答案仍然是最短和最好的 . 但是,我想使用Java 8 Streams提供替代方案,如果它是进一步处理的管道的一部分,将为您带来更多好处 .

    通过将.split函数(本机数组)的结果包装到流中,然后转换为列表 .

    List<String> list =
      Stream.of("a,b,c".split(","))
      .collect(Collectors.toList());
    

    如果根据OP的 Headers 将结果存储为 ArrayList 很重要,则可以使用不同的 Collector 方法:

    ArrayList<String> list = 
      Stream.of("a,b,c".split(","))
      .collect(Collectors.toCollection(ArrayList<String>::new));
    

    或者使用RegEx解析api:

    ArrayList<String> list = 
      Pattern.compile(",")
      .splitAsStream("a,b,c")
      .collect(Collectors.toCollection(ArrayList<String>::new));
    

    请注意,您仍然可以考虑将 list 变量保留为 List<String> 而不是 ArrayList<String> . List 的通用接口看起来仍然与 ArrayList 实现相似 .

    这些代码示例本身似乎并没有增加太多(除了更多的输入),但是如果你打算做更多的事情,比如this answer on converting a String to a List of Longs例证,那么通过允许一个接一个地管理你的操作,流API真的很强大 .

    为了,你知道,完整性 .

  • 3

    没有内置的方法,但你可以简单地使用split()方法 .

    String commaSeparated = "item1 , item2 , item3";
    ArrayList<String> items = 
    new  ArrayList<String>(Arrays.asList(commaSeparated.split(",")));
    
  • 3

    你可以结合asList和split

    Arrays.asList(CommaSeparated.split("\\s*,\\s*"))
    
  • 2

    将集合转换为字符串,在 Java 8 中以逗号分隔

    listOfString对象包含[“A”,“B”,“C”,“D”]元素 -

    listOfString.stream().map(ele->"'"+ele+"'").collect(Collectors.joining(","))
    

    Output is :- 'A','B','C','D'

    And Convert Strings Array to List in Java 8

    String string[] ={"A","B","C","D"};
        List<String> listOfString = Stream.of(string).collect(Collectors.toList());
    
  • 1
    List<String> items= Stream.of(commaSeparated.split(","))
         .map(String::trim)
         .collect(toList());
    
  • 1

    我通常使用预编译模式作为列表 . 而且这更加普遍,因为它可以考虑一些listToString表达式之后的括号 .

    private static final Pattern listAsString = Pattern.compile("^\\[?([^\\[\\]]*)\\]?$");
    
    private List<String> getList(String value) {
      Matcher matcher = listAsString.matcher((String) value);
      if (matcher.matches()) {
        String[] split = matcher.group(matcher.groupCount()).split("\\s*,\\s*");
        return new ArrayList<>(Arrays.asList(split));
      }
      return Collections.emptyList();
    
  • 1

    你可以这样做 .

    这将删除空格并用逗号分隔,您无需担心空格 .

    String myString= "A, B, C, D";
    
        //Remove whitespace and split by comma 
        List<String> finalString= Arrays.asList(myString.split("\\s*,\\s*"));
    
        System.out.println(finalString);
    
  • 0

    Arrays.asList 返回由数组支持的固定大小的 List . 如果你想要一个正常的可变 java.util.ArrayList ,你需要这样做:

    List<String> list = new ArrayList<String>(Arrays.asList(string.split(" , ")));
    

    或者,使用Guava

    List<String> list = Lists.newArrayList(Splitter.on(" , ").split(string));
    

    使用 Splitter 可以更灵活地分割字符串,并使您能够跳过结果中的空字符串并修剪结果 . 它也比 String.split 具有更少的怪异行为,并且不需要你通过正则表达式进行拆分(这只是一个选项) .

  • 0
    List<String> items = Arrays.asList(commaSeparated.split(","));
    

    这对你有用 .

  • 0

    在groovy中,您可以使用tokenize(Character Token)方法:

    list = str.tokenize(',')
    
  • 0

    String -> Collection 转换:(String - > String [] - > Collection)

    //         java version 8
    
    String str = "aa,bb,cc,dd,aa,ss,bb,ee,aa,zz,dd,ff,hh";
    
    //          Collection,
    //          Set , List,
    //      HashSet , ArrayList ...
    // (____________________________)
    // ||                          ||
    // \/                          \/
    Collection<String> col = new HashSet<>(Stream.of(str.split(",")).collect(Collectors.toList()));
    

    Collection -> String[] 转换:

    String[] se = col.toArray(new String[col.size()]);
    

    String -> String[] 转换:

    String[] strArr = str.split(",");
    

    Collection -> Collection

    List<String> list = new LinkedList<>(col);
    
  • -1

    使用 Collections 的示例 .

    import java.util.Collections;
     ...
    String commaSeparated = "item1 , item2 , item3";
    ArrayList<String> items = new ArrayList<>();
    Collections.addAll(items, commaSeparated.split("\\s*,\\s*"));
     ...
    
  • -1
    List<String> items = Arrays.asList(s.split("[,\\s]+"));
    
  • -3

    有很多种方法可以使用 Java 8 中的流来解决这个问题,但是IMO下面的一个内容是直截了当的:

    String  commaSeparated = "item1 , item2 , item3";
    List<String> result1 = Arrays.stream(commaSeparated.split(" , "))
                                                 .collect(Collectors.toList());
    List<String> result2 = Stream.of(commaSeparated.split(" , "))
                                                 .collect(Collectors.toList());
    

Related