自定义 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 具有三个 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;
}
我可以从您的代码和结果中推断出两个问题:
很明显,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;
。可能打错了,改正一下吧
这是我的代码:
@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 具有三个 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;
}
我可以从您的代码和结果中推断出两个问题:
很明显,
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;
。可能打错了,改正一下吧