在保存arraylist之前删除StringBuilder

时间:2016-12-09 04:22:58

标签: java stringbuilder filewriter

我正在执行以下步骤,在保存原始文件时遇到问题。

  1. 将文件读取到对象
  2. 将对象添加到arraylist
  3. 覆盖toString方法以打印到控制台
  4. 保存文件 重复。
  5. 问题正在重复,因为文件布局现已更改。我正在尝试找到一种方法来打印到没有所有附加的文件。

    我调查了两种不同的方式,在阅读时忽略了单词,并尝试在保存之前删除单词。这两件事看起来都很混乱和混乱。

    这是我的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));
        }
    

1 个答案:

答案 0 :(得分:0)

我想我知道你在问什么。您实现了一个toString(),它对控制台打印输出很有用,但不能用于将数据写入文件。这很好,并不罕见。在您的代码中,您使用toString()来提供信息/用户界面,因此当您将其保存到文件时,您只需要使用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()保存,除了别的东西。