【问题标题】:Buffer string to array list, and split将字符串缓冲到数组列表,然后拆分
【发布时间】:2013-05-03 12:23:02
【问题描述】:

我正在将一个文本文件缓冲到“arraylist 行”中,然后我需要将每一行拆分为一个新的 arrayList 部分,以便我可以从每一行中找到信息并将数据添加到我构建的模型中,原因我使用 arrayLists 是因为有可扩展的属性,这意味着我不需要担心行或文本文件的大小。

代码如下:

    try(BufferedReader buffer = 
            new BufferedReader(new FileReader("src/Sample.txt")))
    {
        String currentLine;
        ArrayList<String> lines = new ArrayList<String>();
        ArrayList<String> parts = new ArrayList<String>();
        //ListIterator<String> lineItr = lines.listIterator();

        while((currentLine = buffer.readLine()) != null)
        {
            lines.add(currentLine);

            for(String line : lines)
            {
                parts.addAll(line.split("\\s+"));

            }


            //lineItr.next();
            //lineItr.set(currentLine);

            //System.out.println(lineItr.next());
        }
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }

}

我遇到了parts.addAll(line.split("\s+"); 的问题。 我不明白为什么该语句不遍历行,拆分字符串的每个部分并将其添加到部件数组列表中,我在这里误解了什么吗?

感谢胡言乱语

【问题讨论】:

    标签: java


    【解决方案1】:

    list.addAll() 接受 java.util.Collection 其中 str.split 返回您的数组不是集合。因此,您不能将其直接添加到列表中。你需要先转换成一个列表。

    for(String line : lines)
    {
       parts.addAll(Arrays.asList(line.split("\\s+"));
    }
    

    【讨论】:

      【解决方案2】:

      String.split() 返回字符串数组。所以你必须使用 Arrays.asList() 将其转换为 list 。

      parts.addAll(line.split("\\s+"));
      

      上面的行应该是:

      parts.addAll(Arrays.asList(line.split("\\s+")));
      

      或者:

      Collections.addAll(parts, line.split("\\s+"));
      

      【讨论】:

      • 感谢您的解释:),什么是收藏?
      • @Babbleshack 请参阅this 链接以更好地理解。
      • @Babbleshack No. 点击我之前评论的“这个”。
      【解决方案3】:

      试试这个

      parts.addAll(Arrays.asList(line.split("\\s+")));
      

      【讨论】:

        【解决方案4】:

        List.addAll 接受一个 Collection,但 line.split("\\s+") 返回 String[]。你可以这样做

        parts.addAll(Arrays.asList(line.split("\\s+")));
        

        【讨论】:

          【解决方案5】:

          每次新行到达时,您都会重新附加整个内容。删除内部的“for”循环,而是拆分 currentLine。

          根据评论编辑:

          Java 方式将年和月对象实现为容器。更简单的替代方法是使用字符串键映射。

          【讨论】:

          • 这很好,问题是我想合并第二个数据集,如果该数据集包含不同的布局,那么我将无法处理它。
          • 我想我不明白 :-)
          • 哈哈,好吧,我有一个数据集。这是一个文本文件。每行有一年,然后是一个月,然后是几天的集合,我想将该数据加载到年 obj 的数组列表中,其中包含月份 obj 的数组列表,而该数组列表又包含天的列表。如果数据文件的格式发生变化,如果我不使用行列表,我将无法加载数据。
          • 哦,那是一个完全不同的问题 :-) 我会编辑我的答案。
          • 当我从讲座回来时,我会查看字符串键映射
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-13
          • 2021-04-28
          • 1970-01-01
          相关资源
          最近更新 更多