Вы предполагаете, что ввод идеален. Если вы посмотрите, как настроено ваше приложение, на основании быстрого чтения вашего алгоритма, данные будут выглядеть так:
ARTIST="John"
TITLE="HELLO WORLD"
LYRICS="Sing Song All night long"
"
Но рассмотрим случай
ARTIST="John"
TITLE="HELLO WORLD"
LYRICS="Sing Song All night long"
"
ARTIST="Peter"
LYRICS="Sing Song All night long"
"
Основываясь на вашем алгоритме, теперь у вас есть 2 песни, охарактеризованные как
songList = { Song("JOHN", "HELLO WORLD", "Sing Song All night long"),
Song("Peter", "HELLO WORLD", "Sing Song All night long") }
При текущем алгоритме исполнитель и название отображаются и будут отображаться во 2-й песне, даже если они не были определены. Вам необходимо сбросить три переменные.
в вашем другом вы просто добавляете полную строку в текст. Что, если вы уже вытащили тексты песен, теперь вы переопределите это. Тестовый кейс
ARTIST="John"
LYRICS="Sing Song All night long"
TILET="HELLO WORLD"
"
Рассмотрите возможность отправки этой записи в состояние ошибки. Поэтому, когда пакетное чтение завершено, отчет об ошибке может быть сгенерирован и исправлен.
Также вы рассматриваете EOF только после того, как исполнитель был прочитан. Что если EOF возникает во время чтения Исполнителя, а файл не заканчивается на ". Вы получите исключение там. В вашем do / while добавьте другое проверка для hasNextLine ()