У меня есть несколько классов, предназначенных для моделирования каталога книг. У меня есть класс книги (isbn, title и т. Д.), Класс BookNode, BookCatalog, который является LinkedList книг и классами драйверов (gui). Моя проблема заключается в том, что у меня есть метод toString() в BookCatalog, который должен возвращать строковое представление всех книг. Класс Book также переопределяет toString(). Я должен иметь каждое поле книги, разделенное «вкладкой», и каждой книгой, разделенной «новой строкой». Когда я пытаюсь использовать PrintStream для печати каталога книг в .txt-файле, \ n не регистрируется.как вставить новый строковый символ в строку в PrintStream, а затем использовать сканер для повторного чтения файла
Я попытался изменить его на System.getProperty (line.separator), который правильно отображает книжный каталог. Но теперь у меня проблема, когда сканер не будет правильно читать файл и выбрасывает «NoSuchElementException». Как получить сканер для 1) Игнорировать line.separator или 2) использовать printStream \ n?
Book.java
public String toString(){
return isbn+"\t"+lastName+"\t"+firstName+"\t"+title+"\t"+year+"\t"+
String.format("%.2f",price);
BookCatalog.java
public String toString() {
BookNode current = front;
String s="";
System.out.println(s);
while (current!=null){
//each book is listed on separate line
s+=current.getData().toString()+"\n ";//System.getProperty("line.separator")
current = current.getNext();
}
return s;
}
Driver.java
public void loadDirectory() throws FileNotFoundException {
if (f.exists()){
Scanner input = new Scanner(f);
while (input.hasNextLine()){
String bookLine = input.nextLine();
processBookLine(bookLine);
}
}
}
public void processBookLine(String line){
Scanner input = new Scanner(line);
String isbn = input.next();
String lastName = input.next();
String firstName = input.next();
String title = input.next();
while (input.hasNext() && !input.hasNextInt()){//while next token is not an integer
title += " "+input.next();
}
int year = input.nextInt();
double price = input.nextDouble();
Book book = Book.createBook(isbn, lastName, firstName, title, year, price);
if (book!=null){
catalog.add(book);
}
}
Если вы утверждаете, что 'PrintStream' подавляет' \ r', вы ошибаетесь. Остальная часть вашего вопроса непонятна. – EJP
Я использовал System.getProperty («line.separator») вместо \ n, поэтому, когда я открываю вновь созданный файл (из PrintStream) и пытаюсь перечитать его (сканер), он не будет обрабатывать строку. Я предполагаю, что «line.separator» является причиной, по которой я попытался сохранить символ в другой переменной, чтобы обойти его, но это тоже не сработало. – Sara