#java #loops #object #arraylist #java-11
Вопрос:
Я читаю небольшой файл (используя сканер Java), разбираю строки на определенные строки и сохраняю информацию из строк в объект. Я могу получить доступ только к последнему элементу, но когда я перемещаю объявление нового объекта и пытаюсь добавить что-то внутри цикла, это портит мой код, и я вообще ничего не получаю. Есть несколько различных циклов, которые мне нужно пройти, чтобы получить всю информацию, но я получаю только последний. «Мы должны сканировать только один раз», — подумал я.
Я добавил счетчик, думая, что могу добавить еще один цикл (после), но получит ли он доступ к той же информации?
Но как мне получить все мои объекты, чтобы я мог добавить их в свой список объектов?
public static void main(String[] args) throws FileNotFoundException {
// read in the song file and build the songs array
File text = new File ("short.txt");
Scanner scnr = new Scanner (text);
String artist = " ";
String title = " ";
String lyrics = " ";
int count =0;
ArrayList <Song> song_list = new ArrayList<Song>();
while (scnr.hasNextLine()){
String next = scnr.nextLine();
if (next.startsWith("ARTIST")){
artist = (next.substring(8, next.length()-1));
}
else if (next.startsWith("TITLE")) {
title = (next.substring(7, next.length()-1));
count ;
}
else if (next.startsWith("LYRICS")) {
lyrics = (next.substring(8, next.length()) "n");
}
if (!next.contains(""")){
StringBuilder sb = new StringBuilder();
lyrics = sb.append(next) "n";
}
}
Song songs = new Song (artist, title, lyrics);
song_list.add(songs);
System.out.print(songs);
scnr.close();
Спасибо вам за любую помощь!
Комментарии:
1. @ScaryWombat это выходит за скобки… вы бы все равно объявили об этом перед циклом?
2.Всегда ли файл в порядке?
ARTISTS
,TITLE
LYRICS
?3. @ScaryWombat да, это так! одна двойная цитата в отдельной строке отделяет текст от следующего исполнителя.
4. Можете ли вы включить образец входного файла с вопросом? Было бы намного проще дать ответ на этот вопрос вместе с улучшениями, которые можно внести в код.
Ответ №1:
Если файлы всегда в порядке, вы можете изменить свой код, чтобы проверить lyrics
, не пусты ли они, а затем вставить в свой список
while (...) {
// read artists
// read title
// read lyrics
if (!lyrics.isEmpty()) {
// create song and add to list
// then reset lyrics to empty
}
}