【问题标题】:Splitting string[] to ArrayList and Returning Values将 string[] 拆分为 ArrayList 并返回值
【发布时间】:2012-05-28 07:28:45
【问题描述】:

我在将字符串数组拆分为 List/ArrayList 时遇到问题。我意识到这是基本的东西,但我看过太多的例子,以至于我现在对正在发生的事情(或没有发生的事情)感到完全困惑。

一些代码sn-ps:

private String[] stringTempList;
private ArrayList<List<String>> arrayImageList = new ArrayList<List<String>>();

我的列表是从网页中读取的,格式为纯文本格式,例如: ['One','Two','Three', etc ...]

所以,有些行可以去掉我想要/不想要的东西(注意 - 我已经将它们分开以帮助我完成整个过程):

stringExtractedList = stringText.substring(stringText.indexOf("['") + 2,
                stringText.lastIndexOf("']"));    
stringTempList = stringExtractedList.split("','");

据我所知,上述工作按预期工作(创建一个数组 (stringTempList),在它看到 ',' 的地方拆分每个项目。

哪里出错了:

arrayImageList.add((List<String>) Arrays.asList(stringTempList));

我希望这条线能够获取我的数组 (stringTempList) 并将项目移动到 ArrayList 中。我希望使用类似于arrayImageList.get(i); 的代码来访问单个元素。

但是,上面的代码似乎将所有项目添加到 arrayImageList 中的第一个索引(列表大小始终为 1)。运行一些调试测试,例如 Log.d("Test", arrayImageList.get(0)); 返回以下内容:

[One,Two,Three,Four, etc...] 

如果有人能指出我正确的方向,我将不胜感激。我想我在这里混淆了两个不同的想法。

【问题讨论】:

  • 你检查 split(",") 的确切结果了吗?
  • 不熟悉 Java,但private ArrayList&lt;List&lt;String&gt;&gt; arrayImageList = new ArrayList&lt;List&lt;String&gt;&gt;(); 创建了一个列表列表。你想要的只是一个列表。所以选择ArrayListList&lt;String&gt;。此时创建一​​个新列表是多余的 - 所以直接获取split 的结果。或者将其转换为所需的类型(很可能在该步骤中创建副本)
  • 您想用字符串中的已解析元素创建列表列表吗? arrayImageList.add((List) Arrays.asList(stringTempList));不是有效的 java 代码。

标签: java string list arraylist


【解决方案1】:

我想你想使用addAll() 而不是add()

你还需要声明

private List<String> arrayImageList = new ArrayList<String>();

【讨论】:

  • 没问题!这背后的推理对您来说有意义吗?
  • 是的,我想是的。我对 Java(以及一般的 OOP)非常陌生,因此应用我以前的编码知识并不总是有帮助。在我的研究(试图调试我的问题)中,我发现 ArrayList 是 List 的实现。我还读到 List 应该在可能的情况下优先使用 ArrayList。在我的情况下 - 最初我希望数组是固定长度的(所以 List 会这样做),但正如我进一步计划的那样 - 我怀疑非固定长度的列表将是有益的(例如删除损坏的图像链接)。
【解决方案2】:

您想使用addAll,而不是add

【讨论】:

  • 谢谢。我认为部分混乱是.add 似乎添加了所有元素 - 只是没有像预期的那样。
【解决方案3】:

将arrayImageList更改为字符串列表:

private ArrayList<String> arrayImageList = new ArrayList<String>();

并使用 addAll 方法添加它们:

arrayImageList.addAll((List<String>) Arrays.asList(stringTempList));

【讨论】:

  • 谢谢。在纠正以前的错误时,我偶然发现了 ArrayList&lt;List&lt;String&gt;&gt; 解决方案,这让我很困惑。这里有简单的解决方案。
【解决方案4】:

我不确定我是否得到了这个“错误的方法”,而且我对 java 也不是很熟悉,但这是我的想法:

您的“arrayImageList”对象是 List 的 ArrayList。当您添加您的 stringTempList 对象时,该对象将正确存储在“列表列表”的第一个可用索引中。如果您想从“arrayImageList”访问单个元素(字符串),您必须像这样处理第二维(列表的列表):

arrayImageList.get(0).get(i)

另一方面,如果您不需要额外的维度,只需使用 ArrayList 代替 og ArrayList>。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2020-04-16
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 2023-04-03
    相关资源
    最近更新 更多