Из вашего кода
while (readIn.hasNext()) {
readToken= readIn.next();
if (readToken.contains("ARTIST")) {
artist= readIn.next();
}
if (readToken.contains("TITLE")){
title= readIn.next();
System.out.print(artist+" "+title);
}
Программа, если предположить, что она объявлена и создана правильно (переменные artist, readToken и title) в первую очередь
проверяя, существует ли существующая следующая строка в условии while, если это правда, String (я предполагаю) readToken сохраняется как следующая строка. Если readToken содержит «ARTIST», то строка NEXT вниз сохраняется как строка исполнителя. Аналогично для содержания "TITLE". К тому времени, когда цикл while повторяется, вы, возможно, уже нажали LYRICS, полностью пропустив TITLE, и он стал равным NULL.
Возможно, вы хотите сэкономить
artist = readToken;
или title = readToken; вместо этого.
Также не забудьте указать подстроку исполнителя и название, если вы не хотите печатать "ARTIST =" ARTISTNAMEHERER "TITLE =" TITLENAMEHERE "" и скорее "ARTISTNAME, TITLENAME"