在保存 arraylist 之前删除 StringBuilder 追加
Remove StringBuilder appends before saving arraylist
我正在执行以下步骤,但在保存原始文件时遇到问题。
- 读取文件到对象
- 将对象添加到数组列表
- 覆盖打印到控制台的 toString 方法
- 保存文件
重复。
由于文件布局现已更改,此问题重复出现。我正在尝试找到一种方法来打印到文件而无需所有附加内容。
我研究了两种不同的方法,阅读时忽略单词,并尝试在保存前删除单词。两者看起来都非常混乱和混乱。
这是我的 StringBuilder:
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Room Number: ").append(roomNumber);
builder.append(", Room Type: ").append(roomType);
builder.append(", Room Price: £").append(format.format(roomPrice));
builder.append(", Room Balcony: ").append(roomBalcony);
builder.append(", Room Lounge: ").append(roomLounge);
builder.append(", Room Reserved by: ").append(reservedBy);
builder.append("\n");
return builder.toString();
}
这是我的文件扫描器
while (file.hasNextLine()) {
int roomNumber = file.nextInt();
String roomType = file.next();
double roomPrice = file.nextDouble();
boolean roomBalcony = file.nextBoolean();
boolean roomLounge = file.nextBoolean();
String reservedBy = file.next();
roomList.add(new Room(roomNumber, roomType, roomPrice, roomBalcony, roomLounge, reservedBy));
}
我想我知道你在问什么。您实现了一个 toString()
,它对控制台打印输出很有用,但对将数据写入文件没有用。这很好,并不罕见。在您的代码中,您将 toString()
用于 informative/UI 目的,因此当您将它保存到文件时,您不必使用 toString()
。
所以只需...以另一种方式将其保存到文件中。就是这么简单。
例如,您可以添加一个函数来构建可以保存的字符串,例如:
public String toFileString () {
return the line you'd write to a file;
}
然后
ArrayList<MyThings> things = ...;
for (MyThing thing : things)
outputFile.println(thing.toFileString());
或者你可以编写一个函数来写入 PrintWriter
(或其他一些 Writer
但 PrintWriter
有很多方便的方法),例如:
void saveTo (PrintWriter out) {
// print a line to out
}
然后:
for (MyThing thing : things)
thing.saveTo(outputPrintWriter);
或者你可以让你的对象完全不知道文件,而是在保存时明确地写出它的内容:
for (MyThing thing : things) {
out.print(thing.getRoomNumber());
// and so on...
}
或者随便什么。有一百万个选项,重点是,不要用 toString()
保存,用其他东西保存。
我正在执行以下步骤,但在保存原始文件时遇到问题。
- 读取文件到对象
- 将对象添加到数组列表
- 覆盖打印到控制台的 toString 方法
- 保存文件 重复。
由于文件布局现已更改,此问题重复出现。我正在尝试找到一种方法来打印到文件而无需所有附加内容。
我研究了两种不同的方法,阅读时忽略单词,并尝试在保存前删除单词。两者看起来都非常混乱和混乱。
这是我的 StringBuilder:
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Room Number: ").append(roomNumber);
builder.append(", Room Type: ").append(roomType);
builder.append(", Room Price: £").append(format.format(roomPrice));
builder.append(", Room Balcony: ").append(roomBalcony);
builder.append(", Room Lounge: ").append(roomLounge);
builder.append(", Room Reserved by: ").append(reservedBy);
builder.append("\n");
return builder.toString();
}
这是我的文件扫描器
while (file.hasNextLine()) {
int roomNumber = file.nextInt();
String roomType = file.next();
double roomPrice = file.nextDouble();
boolean roomBalcony = file.nextBoolean();
boolean roomLounge = file.nextBoolean();
String reservedBy = file.next();
roomList.add(new Room(roomNumber, roomType, roomPrice, roomBalcony, roomLounge, reservedBy));
}
我想我知道你在问什么。您实现了一个 toString()
,它对控制台打印输出很有用,但对将数据写入文件没有用。这很好,并不罕见。在您的代码中,您将 toString()
用于 informative/UI 目的,因此当您将它保存到文件时,您不必使用 toString()
。
所以只需...以另一种方式将其保存到文件中。就是这么简单。
例如,您可以添加一个函数来构建可以保存的字符串,例如:
public String toFileString () {
return the line you'd write to a file;
}
然后
ArrayList<MyThings> things = ...;
for (MyThing thing : things)
outputFile.println(thing.toFileString());
或者你可以编写一个函数来写入 PrintWriter
(或其他一些 Writer
但 PrintWriter
有很多方便的方法),例如:
void saveTo (PrintWriter out) {
// print a line to out
}
然后:
for (MyThing thing : things)
thing.saveTo(outputPrintWriter);
或者你可以让你的对象完全不知道文件,而是在保存时明确地写出它的内容:
for (MyThing thing : things) {
out.print(thing.getRoomNumber());
// and so on...
}
或者随便什么。有一百万个选项,重点是,不要用 toString()
保存,用其他东西保存。