关于java:如何将逗号分隔的String转换为ArrayList?

How to convert comma-separated String to ArrayList?

在爪哇中有没有内置的方法允许我们将逗号分隔的字符串转换成一些容器(例如数组、列表或向量)?还是需要为此编写自定义代码?

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


将逗号分隔字符串转换为列表

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

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

请注意,这只返回数组上的包装:例如,不能从生成的List返回.remove()。对于实际的ArrayList,您必须进一步使用new ArrayList


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

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

或者,使用番石榴:

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

使用Splitter可以在拆分字符串的方式上提供更多的灵活性,并且可以跳过结果中的空字符串并修剪结果。它还有比String.split更不奇怪的行为,也不要求您使用regex进行拆分(这只是一个选项)。


两个步骤:

  • String [] items = commaSeparated.split(",");
  • List container = Arrays.asList(items);

  • 下面是另一个将csv转换为arraylist的方法:

    1
    2
    3
    4
    5
    6
    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
    -->comma


    如果一个List是OP所说的最终目标,那么已经被接受的答案仍然是最短和最好的。不过,我希望使用Java 8流提供替代方案,如果它是流水线的一部分,则可以为您提供更多的好处。

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

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

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

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

    或者通过使用regex解析API:

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

    注意,您仍然可以考虑将List变量类型保留为List,而不是ArrayListList的通用接口看起来仍然与ArrayList的实现非常相似。

    就其本身而言,这些代码示例似乎不会增加很多内容(除了更多的类型),但是如果您打算做更多的工作,比如将字符串转换为长示例列表时的这个答案,那么流式API通过允许一个接一个地对您的操作进行管道传输,真的非常强大。

    为了,你知道,完整。


    没有内置的方法,但您可以在此中简单地使用split()方法。

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

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

    这对你很有用。


    1
    2
    3
    List<String> items= Stream.of(commaSeparated.split(","))
         .map(String::trim)
         .collect(toList());


    您可以组合aslist和split

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


    此代码将有帮助,

    1
    2
    String myStr ="item1,item2,item3";
    List myList = Arrays.asList(myStr.split(","));

    您可以使用guava来拆分字符串,并将其转换为arraylist。这也适用于空字符串,并返回空列表。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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);

    输出以下内容:

    1
    2
    [item1, item2, item3]
    [item1, item2, item3, another item]

    使用Collections的示例。

    1
    2
    3
    4
    5
    6
    import java.util.Collections;
     ...
    String commaSeparated ="item1 , item2 , item3";
    ArrayList<String> items = new ArrayList<>();
    Collections.addAll(items, commaSeparated.split("\\s*,\\s*"));
     ...


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

    1
    2
    3
    4
    5
    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());


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


    我通常使用预编译的模式。而且,这也稍微更普遍一些,因为它可以考虑在一些listtoString表达式之后使用方括号。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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();

    在groovy中,可以使用tokenize(character token)方法:

    1
    list = str.tokenize(',')

    1
    2
    3
    4
    5
    List commaseperated = new ArrayList();
    String mylist ="item1 , item2 , item3";
    mylist = Arrays.asList(myStr.trim().split(" ,"));

    // enter code here

    使用splitter类可以获得相同的结果。

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

    (用柯特林写的)


    1
    List<String> items = Arrays.asList(s.split("[,\\s]+"));


    你可以这样做。

    这将删除空白,并在不需要担心空白的地方用逗号分隔。

    1
    2
    3
    4
    5
    6
        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);

    string->collection转换:(string->string[]->collection)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //         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[]转换:

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

    string->string[]转换:

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

    和集合->集合:

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

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

    listofstring对象包含["a"、"b"、"c"、"d"]个元素-

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

    输出是:"A"、"B"、"C"、"

    并在Java 8中将字符串数组转换为列表

    1
    2
        String string[] ={"A","B","C","D"};
        List<String> listOfString = Stream.of(string).collect(Collectors.toList());

    1
    2
    ArrayList<HashMap<String, String>> mListmain = new ArrayList<HashMap<String, String>>();
    String marray[]= mListmain.split(",");