Как мне получить доступ ко всем моим вводным данным из моего цикла, чтобы я мог сохранить их как объект?

#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
   }
}