代码之家  ›  专栏  ›  技术社区  ›  Matt

显示错误结果的自定义toString(char)方法

  •  0
  • Matt  · 技术社区  · 7 年前

        @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文件,如下所示:

    enter image description here

    但这正是我所期待的:

    enter image description here

    2 回复  |  直到 7 年前
        1
  •  0
  •   Sunil    7 年前

    请在toString方法中找到更正。让我们假设您的 Project 班级有三个 projectId , projectName startDate 属性。

         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;
         }
    
        2
  •  0
  •   walen    7 年前

    • 显然 toString() 方法来自 Project 类不会返回您期望它返回的内容。你也覆盖了吗?因为在这一行中:

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

      你好像在期待 project 翻译成
      "\"" + project.getId() + "\",\"" + project.getName() + "\",\"" + project.getStart() + "\""
      事实上,当它返回这样的结果时:
      "\nProject ID: " + project.getId() + " Project Name: " + project.getName() + " Start: " + project.getStart() + "\n"
      Project#toString() 让它归还你想要的东西。

    • 你似乎在使用 QUOTE 而不是 EOLN output += EOLN + delimiter; 正在打印这个 ", 真实的 代码为 output += QUOTE + delimiter; . 可能是拼写错误,请更正。