【问题标题】:How to convert a comma separated String to ArrayList in Java [duplicate]如何在Java中将逗号分隔的字符串转换为ArrayList [重复]
【发布时间】:2013-08-08 21:10:26
【问题描述】:

我有一个逗号分隔的字符串,我需要将其转换为 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。

【问题讨论】:

标签: java


【解决方案1】:

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 返回一个固定大小的列表。您不能在其中添加或删除任何内容。如果你想添加或删除一些东西,你应该使用第一个版本。

P.S:您应该使用 List 而不是 ArrayList 作为引用类型。

【讨论】:

  • 他们用了两次同名ArrayList 真是太烦人了:)
  • 可变参数不能帮助拆分字符串 - 上述声明是错误的。
【解决方案2】:

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

不过你可以new ArrayList(Arrays.asList(...));

【讨论】:

  • 它不会返回一个不可修改的列表,你仍然可以调用set(...) 没有任何问题。
  • @arshajii 很公平,我们称它为“恒定大小的列表”。
【解决方案3】:

一定要ArrayList吗?通常,您希望使用最通用的形式。如果您可以使用List,请尝试:

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

您仍然可以像现在一样对其进行迭代。

【讨论】:

    【解决方案4】:

    请尝试使用以下代码。

    字符串[] 临时;

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

    【讨论】:

      【解决方案5】:
      String CommaSeparated = "item1 , item2 , item3";     
      ArrayList<String> items = new ArrayList(Arrays.asList(CommaSeparated.split("\\s*,\\s*")));
      for(String str : items)
      {
          System.out.println(str);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-15
        • 2011-10-01
        • 2015-08-22
        • 2014-08-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多