【问题标题】:How to create objects in Java using data from each line from a CSV file如何使用 CSV 文件中每一行的数据在 Java 中创建对象
【发布时间】:2019-08-03 14:58:55
【问题描述】:

我创建了一个类,它有一个构造函数,该构造函数接受一个字符串行,并在对数据进行一些处理后将其转换为一个对象。

我需要一次将 CSV 中的数据输入构造函数,以便为文件的每一行创建一个对象。但是,从我所有的搜索中,我无法弄清楚如何创建这些对象,因为根据我所学到的,要创建对象,您必须为这些对象命名。有没有办法创建一个对象数组,所以我不必命名每个对象?例如第一行会像 Object[0] 等等?


public class Object{
  String Name, Example, Example2;
  Object(String data){
    //Data manipulation to get into Name Example and Example2 creating an
    //object
  }

  public String getName{
    return Name;
  }
}

public class ObjectFeed{
  //This is where I would open the file and feed it line by line into the  
  //object class
}

我应该能够在任何行号上使用我为 Object 类创建的 getter 方法,并且它应该获取该信息。我只是不明白如何将数据输入对象并创建多个对象。

【问题讨论】:

  • 不要将您的类命名为Object,因为Object 类在Java 中具有特殊含义。变量名也要使用驼峰式,例如:myName, example1, exampleTwo, ...
  • 数据中可以有逗号吗?如果是这样,可能需要引用或转义 CSV 值,您需要在解析中考虑这一点。

标签: java arrays csv class object


【解决方案1】:

我会这样做:

public void createYourObjects() {

  List<String> lines = // however you are reading lines from the CSV file

  List<YourObject> objects = new ArrayList<>();
  for(String line in lines) {
    objects.add(methodB(line);
  }
}

public YourObject createYourObjectFrom(String line) {
  List<String> columns = line.spilt(",");
  return new YourObject(columns.get(0), columns.get(1) ..... columns(n-1));  // where n is the size of the list n-1 is the index of the last item in the list
}

它有点伪代码,但我认为它说明了基本思想。通过使用单独的方法来构造您的对象,您可以将关注点分开,将对象列表的创建与 CSV 文件的结构隔离开来。
它还为您提供了一个地方来提供您可能需要的任何错误或特殊情况处理。

在实际场景中,您可能需要处理不同类型的数据,从String 转换为int,以及当列为空时。 在列为空的情况下,您将获得一个较小的列列表,您将不得不处理这个问题。

【讨论】:

    【解决方案2】:

    如果数据来自 CSV,则每个单元格应以逗号分隔,因此您应该能够获取输入字符串 data 并将其拆分。

    这可以这样做:

    String[] csvList = data.split(",");
    

    然后,您可以将 csvList 的每个元素指定为对象的属性之一,并遍历其所有元素以生成对象列表。

    List<YourObject> objects = new List<YourObject>();
    
    // increment i by the how many properties YourObject has
    for (int i = 0; i < csvList.length; i += 2) {
       YourObject obj = new YourObject();
       obj.FirstProperty = csvList[i];
       obj.SecondProperty = csvList[i+1];
       ...
       objects.add(obj);
    }
    

    【讨论】:

    • csvList 是数组还是列表?我不知道您可以使用数组表示法访问列表项
    猜你喜欢
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    相关资源
    最近更新 更多