Разделитель Java-сканера не разделяет последний раздел

/* txt file
Rolling Stone#Jann Wenner#Bi-Weekly#Boston#9000
Rolling Stone#Jann Wenner#Bi-Weekly#Philadelphia#8000
Rolling Stone#Jann Wenner#Bi-Weekly#London#10000
The Economist#John Micklethwait#Weekly#New York#42000
The Economist#John Micklethwait#Weekly#Washington#29000
Nature#Philip Campbell#Weekly#Pittsburg#4000
Nature#Philip Campbell#Weekly#Berlin#6000
*/   


 public class Zines {

            public static void main(String[] args) throws FileNotFoundException {
                Scanner input = new Scanner(new File("txt.file"));
                input.useDelimiter("#|\n|\r|\r\n");

                while(input.hasNext()) {  
                    String title = input.next();
                    String author = input.next();
                    String publisher = input.next();
                    String city = input.next();
                    String line = input.nextLine();
                    //int dist = Integer.valueOf(line);

                    System.out.println(line); 
        }
        }
    }

Выход:

"#9000
"#8000
"#10000
"#42000
"#29000
"#4000
"#6000  

Выход 2:

9000
Rolling Stone
("Exception in thread "main") Jann Wenner
Weekly
Washington
4000
Nature

1 ответ

Решение

Вопрос здесь заключается в том, почему символы # все еще появляются после использования разделителя?

Потому что вы используете Scanner#nextLine() читать последнюю часть. Это не будет рассматривать разделитель. Он прочитает весь оставшийся текст после ранее прочитанного токена, а не следующего токена.

Итак, если предыдущий токен прочитан Boston, оставшийся текст - #9000, будет прочитано nextLine(), Вы должны использовать scanner#next() вместо.

String line = input.next();
Другие вопросы по тегам