Home > OS >  java.util.NoSuchElementException of ArrayList from Text file
java.util.NoSuchElementException of ArrayList from Text file

Time:10-26

I am getting an error of iterating text file and storing the result into an arraylist, the error occurs after the iterator reaches line 28 from my text file.

The error I get:

java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Scanner.java:937)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextFloat(Scanner.java:2496)
    at countries.ArrayListTest.readData(ArrayListTest.java:46)
    at countries.ArrayListTest.main(ArrayListTest.java:20)
[AD 42.546246   1.601554    Andorra, AE 23.424076   53.847816   United Arab Emirates, AF    33.93911    67.70995    Afghanistan, AG 17.060816   -61.79643   Antigua and Barbuda, AI 18.220554   -63.068615  Anguilla, AL    41.15333    20.168331   Albania, AM 40.0691 45.03819    Armenia, AN 12.226079   -69.06009   Netherlands Antilles, AO    -11.202692  17.873886   Angola, AQ  -75.25098   -0.071389   Antarctica, AR  -38.416096  -63.616673  Argentina, AS   -14.270972  -170.13222  American Samoa, AT  47.51623    14.550072   Austria, AU -25.274399  133.77513   Australia, AW   12.52111    -69.96834   Aruba, AZ   40.143105   47.576927   Azerbaijan, BA  43.915886   17.679075   Bosnia and Herzegovina, BB  13.193887   -59.543198  Barbados, BD    23.684994   90.35633    Bangladesh, BE  50.503887   4.469936    Belgium, BF 12.238333   -1.561593   Burkina Faso, BG    42.733883   25.48583    Bulgaria, BH    25.930414   50.63777    Bahrain, BI -3.373056   29.918886   Burundi, BJ 9.30769 2.315834    Benin, BM   32.321384   -64.75737   Bermuda, BN 4.535277    114.72767   Brunei, BO  -16.290154  -63.588654  Bolivia]
28

The class where I read the file and store the objects in the arraylist:

import java.util.*;


public class ArrayListTest {

    public static void main(String[] args) {
        ArrayList<Country> countries = new ArrayList<Country>();
        try {
            readData(".//Data//CountriesGPS.txt", countries);
        } catch (Exception e) {
            e.printStackTrace();
        }
                
          
        System.out.println(countries.toString());
        System.out.println(countries.size());

    }
    
    public static void readData(String fileName, ArrayList <Country> countries) throws Exception {
        java.io.File file = new java.io.File(fileName); 
        Scanner input = new Scanner(file);
        input.nextLine();

        while (input.hasNext()) {
                        
                        
                        Scanner in = new Scanner(input.nextLine());
            in.useDelimiter("\t");
                        
            String ID = in.next();
            float latitude = in.nextFloat();
            float longitude = in.nextFloat();
            String name = in.next();
            
                     
                        
            countries.add(new Country(ID,  latitude,  longitude,  name));
        }
         input.close();
    }
       
}

The class of the objects that should be stored in the array:

public class Country {
    String country;
    float latitude;
    float longitude;
    String name;

    public Country(String country, float latitude, float longitude, String name) {
        this.country = country;
        this.latitude = latitude;
        this.longitude = longitude;
        this.name = name;
    }

        public String toString () { 
        //Returns a tab-separated string containing the main fields 
        return country   "\t"    latitude   "\t"    longitude   "\t"    name;

    } 

The text file:

country latitude    longitude   name
AD  42.546245   1.601554    Andorra
AE  23.424076   53.847818   United Arab Emirates
AF  33.93911    67.709953   Afghanistan
AG  17.060816   -61.796428  Antigua and Barbuda
AI  18.220554   -63.068615  Anguilla
AL  41.153332   20.168331   Albania
AM  40.069099   45.038189   Armenia
AN  12.226079   -69.060087  Netherlands Antilles
AO  -11.202692  17.873887   Angola
AQ  -75.250973  -0.071389   Antarctica
AR  -38.416097  -63.616672  Argentina
AS  -14.270972  -170.132217 American Samoa
AT  47.516231   14.550072   Austria
AU  -25.274398  133.775136  Australia
AW  12.52111    -69.968338  Aruba
AZ  40.143105   47.576927   Azerbaijan
BA  43.915886   17.679076   Bosnia and Herzegovina
BB  13.193887   -59.543198  Barbados
BD  23.684994   90.356331   Bangladesh
BE  50.503887   4.469936    Belgium
BF  12.238333   -1.561593   Burkina Faso
BG  42.733883   25.48583    Bulgaria
BH  25.930414   50.637772   Bahrain
BI  -3.373056   29.918886   Burundi
BJ  9.30769 2.315834    Benin
BM  32.321384   -64.75737   Bermuda
BN  4.535277    114.727669  Brunei
BO  -16.290154  -63.588653  Bolivia
BR  -14.235004  -51.92528   Brazil
BS  25.03428    -77.39628   Bahamas
BT  27.514162   90.433601   Bhutan
BV  -54.423199  3.413194    Bouvet Island
BW  -22.328474  24.684866   Botswana
BY  53.709807   27.953389   Belarus
BZ  17.189877   -88.49765   Belize
CA  56.130366   -106.346771 Canada
CC  -12.164165  96.870956   Cocos [Keeling] Islands
CD  -4.038333   21.758664   Congo [DRC]
CF  6.611111    20.939444   Central African Republic
CG  -0.228021   15.827659   Congo [Republic]
CH  46.818188   8.227512    Switzerland
CI  7.539989    -5.54708    CÙte d'Ivoire
CK  -21.236736  -159.777671 Cook Islands
CL  -35.675147  -71.542969  Chile
CM  7.369722    12.354722   Cameroon
CN  35.86166    104.195397  China
CO  4.570868    -74.297333  Colombia
CR  9.748917    -83.753428  Costa Rica
CU  21.521757   -77.781167  Cuba
CV  16.002082   -24.013197  Cape Verde
CX  -10.447525  105.690449  Christmas Island
CY  35.126413   33.429859   Cyprus
CZ  49.817492   15.472962   Czech Republic
DE  51.165691   10.451526   Germany
DJ  11.825138   42.590275   Djibouti
DK  56.26392    9.501785    Denmark
DM  15.414999   -61.370976  Dominica
DO  18.735693   -70.162651  Dominican Republic
DZ  28.033886   1.659626    Algeria
EC  -1.831239   -78.183406  Ecuador
EE  58.595272   25.013607   Estonia
EG  26.820553   30.802498   Egypt
EH  24.215527   -12.885834  Western Sahara
ER  15.179384   39.782334   Eritrea
ES  40.463667   -3.74922    Spain
ET  9.145   40.489673   Ethiopia
FI  61.92411    25.748151   Finland
FJ  -16.578193  179.414413  Fiji
FK  -51.796253  -59.523613  Falkland Islands [Islas Malvinas]
FM  7.425554    150.550812  Micronesia
FO  61.892635   -6.911806   Faroe Islands
FR  46.227638   2.213749    France
GA  -0.803689   11.609444   Gabon
GB  55.378051   -3.435973   United Kingdom
GD  12.262776   -61.604171  Grenada
GE  42.315407   43.356892   Georgia
GF  3.933889    -53.125782  French Guiana
GG  49.465691   -2.585278   Guernsey
GH  7.946527    -1.023194   Ghana
GI  36.137741   -5.345374   Gibraltar
GL  71.706936   -42.604303  Greenland
GM  13.443182   -15.310139  Gambia
GN  9.945587    -9.696645   Guinea
GP  16.995971   -62.067641  Guadeloupe
GQ  1.650801    10.267895   Equatorial Guinea
GR  39.074208   21.824312   Greece
GS  -54.429579  -36.587909  South Georgia and the South Sandwich Islands
GT  15.783471   -90.230759  Guatemala
GU  13.444304   144.793731  Guam
GW  11.803749   -15.180413  Guinea-Bissau
GY  4.860416    -58.93018   Guyana
GZ  31.354676   34.308825   Gaza Strip
HK  22.396428   114.109497  Hong Kong
HM  -53.08181   73.504158   Heard Island and McDonald Islands
HN  15.199999   -86.241905  Honduras
HR  45.1    15.2    Croatia
HT  18.971187   -72.285215  Haiti
HU  47.162494   19.503304   Hungary
ID  -0.789275   113.921327  Indonesia
IE  53.41291    -8.24389    Ireland
IL  31.046051   34.851612   Israel
IM  54.236107   -4.548056   Isle of Man
IN  20.593684   78.96288    India
IO  -6.343194   71.876519   British Indian Ocean Territory
IQ  33.223191   43.679291   Iraq
IR  32.427908   53.688046   Iran
IS  64.963051   -19.020835  Iceland
IT  41.87194    12.56738    Italy
JE  49.214439   -2.13125    Jersey
JM  18.109581   -77.297508  Jamaica
JO  30.585164   36.238414   Jordan
JP  36.204824   138.252924  Japan
KE  -0.023559   37.906193   Kenya
KG  41.20438    74.766098   Kyrgyzstan
KH  12.565679   104.990963  Cambodia
KI  -3.370417   -168.734039 Kiribati
KM  -11.875001  43.872219   Comoros
KN  17.357822   -62.782998  Saint Kitts and Nevis
KP  40.339852   127.510093  North Korea
KR  35.907757   127.766922  South Korea
KW  29.31166    47.481766   Kuwait
KY  19.513469   -80.566956  Cayman Islands
KZ  48.019573   66.923684   Kazakhstan
LA  19.85627    102.495496  Laos
LB  33.854721   35.862285   Lebanon
LC  13.909444   -60.978893  Saint Lucia
LI  47.166  9.555373    Liechtenstein
LK  7.873054    80.771797   Sri Lanka
LR  6.428055    -9.429499   Liberia
LS  -29.609988  28.233608   Lesotho
LT  55.169438   23.881275   Lithuania
LU  49.815273   6.129583    Luxembourg
LV  56.879635   24.603189   Latvia
LY  26.3351 17.228331   Libya
MA  31.791702   -7.09262    Morocco
MC  43.750298   7.412841    Monaco
MD  47.411631   28.369885   Moldova
ME  42.708678   19.37439    Montenegro
MG  -18.766947  46.869107   Madagascar
MH  7.131474    171.184478  Marshall Islands
MK  41.608635   21.745275   Macedonia [FYROM]
ML  17.570692   -3.996166   Mali
MM  21.913965   95.956223   Myanmar [Burma]
MN  46.862496   103.846656  Mongolia
MO  22.198745   113.543873  Macau
MP  17.33083    145.38469   Northern Mariana Islands
MQ  14.641528   -61.024174  Martinique
MR  21.00789    -10.940835  Mauritania
MS  16.742498   -62.187366  Montserrat
MT  35.937496   14.375416   Malta
MU  -20.348404  57.552152   Mauritius
MV  3.202778    73.22068    Maldives
MW  -13.254308  34.301525   Malawi
MX  23.634501   -102.552784 Mexico
MY  4.210484    101.975766  Malaysia
MZ  -18.665695  35.529562   Mozambique
NA  -22.95764   18.49041    Namibia
NC  -20.904305  165.618042  New Caledonia
NE  17.607789   8.081666    Niger
NF  -29.040835  167.954712  Norfolk Island
NG  9.081999    8.675277    Nigeria
NI  12.865416   -85.207229  Nicaragua
NL  52.132633   5.291266    Netherlands
NO  60.472024   8.468946    Norway
NP  28.394857   84.124008   Nepal
NR  -0.522778   166.931503  Nauru
NU  -19.054445  -169.867233 Niue
NZ  -40.900557  174.885971  New Zealand
OM  21.512583   55.923255   Oman
PA  8.537981    -80.782127  Panama
PE  -9.189967   -75.015152  Peru
PF  -17.679742  -149.406843 French Polynesia
PG  -6.314993   143.95555   Papua New Guinea
PH  12.879721   121.774017  Philippines
PK  30.375321   69.345116   Pakistan
PL  51.919438   19.145136   Poland
PM  46.941936   -56.27111   Saint Pierre and Miquelon
PN  -24.703615  -127.439308 Pitcairn Islands
PR  18.220833   -66.590149  Puerto Rico
PS  31.952162   35.233154   Palestinian Territories
PT  39.399872   -8.224454   Portugal
PW  7.51498 134.58252   Palau
PY  -23.442503  -58.443832  Paraguay
QA  25.354826   51.183884   Qatar
RE  -21.115141  55.536384   RÈunion
RO  45.943161   24.96676    Romania
RS  44.016521   21.005859   Serbia
RU  61.52401    105.318756  Russia
RW  -1.940278   29.873888   Rwanda
SA  23.885942   45.079162   Saudi Arabia
SB  -9.64571    160.156194  Solomon Islands
SC  -4.679574   55.491977   Seychelles
SD  12.862807   30.217636   Sudan
SE  60.128161   18.643501   Sweden
SG  1.352083    103.819836  Singapore
SH  -24.143474  -10.030696  Saint Helena
SI  46.151241   14.995463   Slovenia
SJ  77.553604   23.670272   Svalbard and Jan Mayen
SK  48.669026   19.699024   Slovakia
SL  8.460555    -11.779889  Sierra Leone
SM  43.94236    12.457777   San Marino
SN  14.497401   -14.452362  Senegal
SO  5.152149    46.199616   Somalia
SR  3.919305    -56.027783  Suriname
ST  0.18636 6.613081    S„o TomÈ and PrÌncipe
SV  13.794185   -88.89653   El Salvador
SY  34.802075   38.996815   Syria
SZ  -26.522503  31.465866   Swaziland
TC  21.694025   -71.797928  Turks and Caicos Islands
TD  15.454166   18.732207   Chad
TF  -49.280366  69.348557   French Southern Territories
TG  8.619543    0.824782    Togo
TH  15.870032   100.992541  Thailand
TJ  38.861034   71.276093   Tajikistan
TK  -8.967363   -171.855881 Tokelau
TL  -8.874217   125.727539  Timor-Leste
TM  38.969719   59.556278   Turkmenistan
TN  33.886917   9.537499    Tunisia
TO  -21.178986  -175.198242 Tonga
TR  38.963745   35.243322   Turkey
TT  10.691803   -61.222503  Trinidad and Tobago
TV  -7.109535   177.64933   Tuvalu
TW  23.69781    120.960515  Taiwan
TZ  -6.369028   34.888822   Tanzania
UA  48.379433   31.16558    Ukraine
UG  1.373333    32.290275   Uganda
US  37.09024    -95.712891  United States
UY  -32.522779  -55.765835  Uruguay
UZ  41.377491   64.585262   Uzbekistan
VA  41.902916   12.453389   Vatican City
VC  12.984305   -61.287228  Saint Vincent and the Grenadines
VE  6.42375 -66.58973   Venezuela
VG  18.420695   -64.639968  British Virgin Islands
VI  18.335765   -64.896335  U.S. Virgin Islands
VN  14.058324   108.277199  Vietnam
VU  -15.376706  166.959158  Vanuatu
WF  -13.768752  -177.156097 Wallis and Futuna
WS  -13.759029  -172.104629 Samoa
XK  42.602636   20.902977   Kosovo
YE  15.552727   48.516388   Yemen
YT  -12.8275    45.166244   Mayotte
ZA  -30.559482  22.937506   South Africa
ZM  -13.133897  27.849332   Zambia
ZW  -19.015438  29.154857   Zimbabwe

CodePudding user response:

It seems like the issue is due to the delimiter you're using when parsing the file. The individual lines are not being split correctly using the tab character as expected. The entire line is in your ID variable

You could try setting a different delimiter in your data. I tried a comma for example and the code worked correctly.

CodePudding user response:

There are many issues with your code:

  1. You build lots of unnecessary new scanner objects.
  2. You read the next line from the file provided by the first scanner into your new scanners but do not advance to the next line in the new scanners (Which will cause the output to display all the text in one line with a ',' delimiter between each line).
  3. You import a class within a function.
public static void readData(String fileName, ArrayList <Country> countries) throws Exception {
    // Bad practice (import)
    java.io.File file = new java.io.File(fileName); 
    // First scanner
    Scanner input = new Scanner(file);
    input.nextLine();

    while (input.hasNext()) {
        // New unnecessary scanner holds the next line in the file 
        // provided by the first scanner.
        // The output will never provide the next line text in a new 
        // line (The scanner is'nt calling nextLine() on itself).
        Scanner in = new Scanner(input.nextLine());
        
        // --START-- The code from here works normally
        in.useDelimiter("\t");
        
        String ID = in.next();
        float latitude = in.nextFloat();
        float longitude = in.nextFloat();
        String name = in.next();
        
        countries.add(new Country(ID,  latitude,  longitude,  name));
        // --END--
    }
     input.close();
}

Let me fix your code for you:

public static void readData(String fileName, ArrayList <Country> countries) throws Exception {
    File file = new File(fileName); 
    Scanner in = new Scanner(file);
    in.useDelimiter("\t");
    
    while (in.hasNextLine()) {
        in.nextLine();
        
        String ID = in.next();
        float latitude = in.nextFloat();
        float longitude = in.nextFloat();
        String name = in.next();
        
        countries.add(new Country(ID,  latitude,  longitude,  name));
    }
    in.close();
}

Final most important thing, make sure that each word in your text file is actually separated using a '/t'.

  • Related