如何在Java中将逗号分隔的字符串转换为ArrayList

6

我有一个逗号分隔的字符串,需要将其转换为ArrayList。我尝试了以下方法:

import java.util.ArrayList;
import java.util.Arrays;

    public class Test {

        public static void main(String[] args) {

            String CommaSeparated = "item1 , item2 , item3";

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

            for(String str : items)
            {
                System.out.println(str);
            }

        }

    }

它给我显示运行时错误如下:

Exception in thread "main" java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList
    at com.tradeking.at.process.streamer.Test.main(Test.java:14)

当我试图强制将List转换为ArrayList时。


2
尝试使用以下代码:ArrayList<String> items = new ArrayList(Arrays.asList(CommaSeparated.split("\\s*,\\s*"))) - user902383
这个问题可能会有用处:https://dev59.com/jG445IYBdhLWcg3w3N6z - Adil
5个回答

19
Arrays.asList返回的ArrayList不是java.util.ArrayList,而是java.util.Arrays.ArrayList,因此您不能将其强制转换为java.util.ArrayList

您需要将该列表传递给java.util.ArrayList类的构造函数:

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

或者,您可以直接赋值结果:

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

但需要注意的是,Arrays.asList 返回的是一个固定大小的列表。你不能在其中添加或删除任何内容。如果你想要添加或删除某些东西,应该使用第一版本。

附言:你应该使用 List 作为引用类型,而不是 ArrayList


他们把相同的名称“ArrayList”用了两次,这真的很让人恼火 :) - arshajii
可变参数并不能帮助拆分字符串 - 上述说法是错误的。 - fjf2002

2
你不能像糖果一样随意转换对象。Arrays.asList()不返回ArrayList,因此你不能将其强制转换(它返回一个不可修改的List)。
但是你可以使用new ArrayList(Arrays.asList(...));

它不会返回一个不可修改的列表,你仍然可以毫无问题地调用 set(...) - arshajii
@arshajii 好吧,我们称之为“常量大小列表”。 - Kayaman

1

它一定需要是一个ArrayList吗?通常情况下,您应该使用最通用的形式。如果您可以使用List,只需尝试:

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

你仍然可以按照当前的方式迭代它。

1
String CommaSeparated = "item1 , item2 , item3";     
ArrayList<String> items = new ArrayList(Arrays.asList(CommaSeparated.split("\\s*,\\s*")));
for(String str : items)
{
    System.out.println(str);
}

1
请尝试使用以下代码。

String[] temp;

    /* delimiter */
    String delimiter = ",";
    /*
     * given string will be split by the argument delimiter provided.
     */
    temp = parameter.split(delimiter);
    ArrayList<String> list = new ArrayList<String>();

    for (int l = 0; l < temp.length; l++)

    {

        list.add(temp[l]);

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接