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 。

4

5 回答 5

19

ArrayList返回的Arrays.asList不是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返回一个固定大小的列表。您不能在其中添加或删除任何内容。如果要添加或删除某些内容,则应使用第一个版本。

PS:您应该使用List作为参考类型而不是ArrayList.

于 2013-08-07T13:12:31.300 回答
2

你不能把物体像糖果一样四处乱扔。Arrays.asList()不返回ArrayList,所以你不能转换它(它返回一个不可修改的列表)。

但是你可以做new ArrayList(Arrays.asList(...));

于 2013-08-07T13:12:37.600 回答
1

它绝对需要是一个ArrayList吗?通常,您希望使用最通用的形式。如果您可以List尝试一下:

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

您仍然可以像现在一样迭代它。

于 2013-08-07T13:13:21.657 回答
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);
}
于 2013-08-07T13:20:41.253 回答
1

请尝试使用以下代码。

字符串[] 温度;

    /* 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]);

    }
于 2013-08-07T13:20:46.183 回答