自定义 toString(char) 方法显示不正确的结果

Custom toString(char) method displaying incorrect result

这是我的代码:

    @Override
    public String toString() {
        return "\nCustomer Id: " + this.customerId +
                "\nName: " + this.customerName +
                "\nProjects: " + "\n" + getNumberedProjects();
    }

     public String toString(char delimiter) {
        final String QUOTE = "\"";
        final String EOLN = "\n";
        String output =  Integer.toString(this.customerId) + delimiter +
                         QUOTE + this.customerName + QUOTE + delimiter +
                         Integer.toString(this.customerProjects.size());

      output += EOLN + delimiter;
        for (Project project : customerProjects)
              output += EOLN + delimiter + QUOTE + project + QUOTE;
        output += EOLN;
        return output;
     }

它被那个部分调用:

public void store(String filename, Repository repository) {
    try (PrintWriter output = new PrintWriter(filename)) {
        output.print(repository.toString(DELIMITER));
        output.close();
    } catch (FileNotFoundException ex) {
        Logger.getLogger(DAOTextImpl.class.getName()).log(Level.SEVERE, null, ex);
    }        
}

它创建了一个如下所示的 txt 文件:

但这正是我所期待的:

请在 toString 方法中找到更正。假设您的 Project class 具有三个 projectIdprojectNamestartDate 属性。

     public String toString(char delimiter) {
        final String QUOTE = "\"";
        final String EOLN = "\n";
        String output =   (this.customerId) + delimiter +
                         QUOTE + this.customerName + QUOTE + delimiter +
                         Integer.toString(this.customerProjects.size());

      output += EOLN ;
        for (Project project : customerProjects){
              output += QUOTE + project.getProjectId() + QUOTE;
              output +=   delimiter + QUOTE + project.getProjectName() + QUOTE;
              output +=   delimiter + QUOTE + project.getStartDate();
        output += EOLN;
        }
        return output;
     }

我可以从您的代码和结果中推断出两个问题:

  • 很明显,Project class 中的 toString() 方法并不 return 您所期望的 return。你也覆盖了吗?因为在这一行中:

    output += EOLN + delimiter + QUOTE + project + QUOTE;
    

    你似乎期待 project 翻译成类似
    的东西 "\"" + project.getId() + "\",\"" + project.getName() + "\",\"" + project.getStart() + "\""
    而实际上它是 returning 这样的东西:
    "\nProject ID: " + project.getId() + " Project Name: " + project.getName() + " Start: " + project.getStart() + "\n"
    您需要覆盖 Project#toString() 以使其成为您想要的 return。

  • 您似乎在实际代码(不是您向我们展示的代码)中使用 QUOTE 而不是 EOLN。因为这一行 output += EOLN + delimiter; 正在打印此 ",,唯一的解释是您的 实际 代码是 output += QUOTE + delimiter;。可能打错了,改正一下吧