Próbuję wczytać poniższy plik składający się z 16 powtarzających czterolinijkowych się struktur:
Arka Augustów AUG Stadion Augustowski 01 01 01 01 2 6 8 8 Błyskawica Białystok BIA Stadion Miejski w Białymstoku 02 02 02 02 2 6 8 8 Czarni Cieszanów CIE Arena Cieszanów 03 03 03 03 2 6 8 8 Diament Drohiczyn DRO Arena Drohiczyn 04 04 04 04 2 6 5 5 Galicja Grajewo GRA Stadion Miejski w Grajewie 05 05 05 05 2 6 8 8 Hetman Hrubieszów HRU Stadion im. Witolda Pileckiego 06 06 06 06 2 6 8 9 Jutrzenka Jedwabne JED MOSiR w Jedwabnem 07 07 07 07 2 6 1 8 Korona Kraśnik KRA Stadion Miejski w Kraśniku 08 08 08 08 2 6 2 8 Naprzód Nisko NIS MOSiR w Nisku 09 09 09 09 2 6 8 3 Olimpia Oleszyce OLE Arena Oleszyce 10 10 10 10 3 6 4 8 Pogoń Przemyśl PRZ Stadion im. Łukasza Cieplińskiego 11 11 11 11 3 6 9 8 Ruch Rudnik RUD Stadion Miejski w Rudniku 12 12 12 12 3 6 2 8 Sokół Sokółka SOK Stadion Miejski w Sokółce 13 13 13 13 3 6 3 8 Tłoki Tarnobrzeg TAR Stadion im. Zbigniewa Herberta 14 14 14 14 3 7 4 9 Unia Ulanów ULA Stadion w Ulanowie 15 15 15 15 3 9 4 1 Zawisza Zamość ZAM Stadion im. Jana Łożańskiego 16 16 16 16 1 6 4 2
Udało mi się odczytać dane poprawnie za pomocą takiego kodu z użyciem licznika:
Scanner scanner = new Scanner(file); String name, abbreriation, stadium, logo, turf, kitHome, kitAway; int amountPass, amountCross, amountShoot, strategy; int counter = 0; while (scanner.hasNextLine()) { counter++; name = scanner.nextLine(); // System.out.println(name); abbreriation = scanner.nextLine(); // System.out.println(abbreriation); stadium = scanner.nextLine(); // System.out.println(stadium); logo = scanner.next(); // System.out.println(logo); turf = scanner.next(); // System.out.println(turf); kitHome = scanner.next(); // System.out.println(kitHome); kitAway = scanner.next(); // System.out.println(kitAway); amountPass = scanner.nextInt(); // System.out.println(amountPass); amountCross = scanner.nextInt(); // System.out.println(amountCross); amountShoot = scanner.nextInt(); // System.out.println(amountShoot); strategy = scanner.nextInt(); // System.out.println(strategy); if (count < 16) scanner.nextLine(); }
Jeżeli zakomentuję linię 26 zostaje wyrzucony wyjątek, że próbuję dostać się o linię za daleko...
java.util.NoSuchElementException: No line found
W jaki sposób mogę to zrobić elegancko, tak aby program bez sprawdzania ilości danych faktycznie czytał je tylko do końca pliku? Zmienić rozmieszenie danych w pliku tekstowym, skorzystać z innej klasy, czy może jednak lekko zmodyfikować moje rozwiązanie?