【问题标题】:Where/how to create new object in loop在哪里/如何在循环中创建新对象
【发布时间】:2015-02-04 20:11:01
【问题描述】:

假设我有一个文本文件,我在其中循环遍历每一行。文本文件行如下所示:

1
2
3
4

1
2
3
4

1
2
3
4

我还有一个名为 DataHolder 的类,我希望每个段都有一个新实例(其中段是第 1 2 3 4 行)。 DataHolder 类具有 1 2 3 和 4 的变量。当迭代器命中空白时,应为下一个 1 2 3 4 创建 DataHolder 类的新对象。

我怎样才能做到这一点?这就是我目前所拥有的

File theFile = new File(pathToFile);
try
{
    Scanner fileContent = new Scanner(theFile);
    DataHolder data = new DataHolder();
    while(fileContent.hasNextLine())
    {
        String line = fileContent.nextLine();
        if(line == "")
        {

        }
    }  
}
catch(Exception e)
{
    // ToDo
}

【问题讨论】:

  • 阅读每一行。如果 value 不为空,则将 value 存储到 List 中。当您点击空白区域时,创建 DataHolder 从列表中提取值。然后清理列表并重复
  • new DataHolder() 实例化一个新对象。您可以在循环内部和外部执行这样的操作。当然,您需要对新实例做一些事情(将其分配给变量,将其放入集合中,...)才能使用。

标签: java loops object


【解决方案1】:
File theFile = new File(pathToFile);
try
{
    Scanner fileContent = new Scanner(theFile);
    List<DataHolder> dataList = new ArrayList<DataHolder>();
    List<String> stringList = new ArrayList<String>();
    while(fileContent.hasNextLine())
    {
        stringList.add(fileContent.nextLine());
        if(line.equals(""))
        {
            if (!stringList.isEmpty())
            dataList.add(new DataHolder(stringList));
            stringList.clear();

        }
    }  
}
catch(Exception e)
{
    // ToDo
}

【讨论】:

  • 虽然 Brian 的回答很好,但这是完整的代码 sn-p。
  • 只是一个小评论,你可以关闭资源。
【解决方案2】:

这个:

if(line == "")

不正确,因为您正在比较参考。你应该使用

if(line.equals(""))

然后您可以可靠地比较字符串,然后通过以下方式在循环中重新初始化您的 DataHolder 对象:

if(line.equals("")) {
   data = new DataHolder();
}

假设您需要存储一个 DataHolders 集合,在这种情况下,您可以将其添加到此处的集合中。也许还可以调查String.trim(),这样多个空格就不会破坏您的解析。

【讨论】:

  • 这仅提供了部分答案。这不会在 DataHolder 中设置变量
  • 这不是他要求的(尽管代码中缺少该部分)
  • 他们似乎在问这个问题:The DataHolder class has variables for 1 2 3 and 4. 然后DataHolder class should be created for the next 1 2 3 4.
猜你喜欢
  • 2016-02-22
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
相关资源
最近更新 更多