【问题标题】:Taking a CSV file, splitting it, and adding each split part into an attribute of an object获取 CSV 文件,将其拆分,并将每个拆分部分添加到对象的属性中
【发布时间】:2015-04-19 01:34:43
【问题描述】:

我一直在处理一项任务,遇到了困难。这是一个创建元素周期表的程序。要创建每个元素,我需要获取一个文件(CSV),拆分它,并将每个拆分部分设置为一个名为“元素”的对象的属性。分割文件的每一行并读入到目前为止都没有问题。但是,我一直坚持如何获取每个部分并将其添加为 Element 对象的属性。任何人都可以对此有所了解吗?

这是我的代码:

“周期表”类:

public class PeriodicTable  {
    private String line;
    private String[] parts;
    private String filename = "file.csv";

    public PeriodicTable() throws IOException {
    }

    public void readValues(String filename) throws IOException{
        Scanner sc = new Scanner(new FileReader(filename));
        ArrayList<Element> ar1 = new ArrayList<Element>();
        while(sc.hasNextLine()){
            line  = sc.nextLine();
            parts = line.split(",");
            Element el = new Element();

            el.setChemicalName(parts[0]);
            el.setAtomNum(parts[1]);
            el.setMeltPoint(parts[3]);
            el.setBoilPoint(parts[4]);
            el.setDensity(parts[5]);
            el.setAtomWeight(parts[6]);

            // System.out.println(el.getChemicalName());
            //System.out.println(el.getAtomWeight());

            ar1.add(el);
        }
        System.out.println(ar1);
    }
}

“元素”类

public class Element {
    private String chemicalName;
    private String atomNum;
    private String boilPoint;
    private String meltPoint;
    private String density;
    private String atomWeight;

    public Element() throws IOException{
    }

    /**
     * @return the chemicalName
     */
    public String getChemicalName() {
        return chemicalName;
    }
    /**
     * @param chemicalName the chemicalName to set
     */
    public void setChemicalName(String chemicalName) {
        this.chemicalName = chemicalName;
    }
    /**
     * @return the atomNum
     */
    public String getAtomNum() {
        return atomNum;
    }
    /**
     * @param atomNum the atomNum to set
     */
    public void setAtomNum(String atomNum) {
        this.atomNum = atomNum;
    }
    /**
     * @return the boilPoint
     */
    public String getBoilPoint() {
        return boilPoint;
    }
    /**
     * @param parts2 the boilPoint to set
     */
    public void setBoilPoint(String parts2) {
        this.boilPoint = parts2;
    }
    /**
     * @return the meltPoint
     */
    public String getMeltPoint() {
        return meltPoint;
    }
    /**
     * @param parts2 the meltPoint to set
     */
    public void setMeltPoint(String parts2) {
        this.meltPoint = parts2;
    }
    /**
     * @return the density
     */
    public String getDensity() {
        return density;
    }
    /**
     * @param density the density to set
     */
    public void setDensity(String density) {
        this.density = density;
    }
    /**
     * @return the atomWeight
     */
    public String getAtomWeight() {
        return atomWeight;
    }
    /**
     * @param input the atomWeight to set
     */
    public void setAtomWeight(String input) {
        this.atomWeight = input;
    }

    @Override
    public String toString(){
        return chemicalName;
    }
}   

因为String.split() 方法使用一个数组来保存每个拆分的部分,所以我尝试使用对保存该值的部分数组中的索引的引用来为每个属性设置值,例如...。

el.setChemicalName(parts[0]));

但是,这似乎不起作用 - 当我尝试打印出该变量的值时,我通常会得到一个空值。

【问题讨论】:

  • 如果你先读入关于你正在阅读的元素的必要数据,它会更干净一些。并在制作对象时立即传递这些属性值。因此,您将它们作为参数传递给构造函数。这样您就不必在创建实例后设置它们。显示“线”和“部分”可能表明原因。

标签: java string csv split


【解决方案1】:

我建议您使用OpenCSV 让您的生活更轻松。

【讨论】:

    【解决方案2】:

    您的代码工作正常,但请

    1. 检查变量filename,可能是调用readValues方法时传递了错误的值。
    2. 您确定 CSV 文件的标记分隔符是逗号“,”。如果您使用的是办公应用程序(MS Office 中的 Excel 或 Libre/Open Office 中的 Calc),并且未指定标记,则默认分隔符为分号“;”。
    3. 在方法String.split 中最好使用parts = line.split("\\,");,因为拆分使用和正则表达式在字符串数组中进行分隔。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多