java.util.NoSuchElementException of ArrayList from Text file



我得到迭代文本文件并将结果存储到数组列表的错误,错误发生在迭代器到达文本文件的第28行之后。

我得到的错误:

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

读取文件并将对象存储在数组列表中的类:

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();
}

}

应该存储在数组中的对象的类:

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;
} 

文本文件:

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

问题似乎是由于解析文件时使用的分隔符。单独的行没有按照预期使用制表符正确分割。整行都在ID变量

中您可以尝试在数据中设置不同的分隔符。例如,我尝试了一个逗号,代码工作正常。

你的代码有很多问题:

  1. 构建了许多不必要的新扫描仪对象
  2. 从第一个扫描器提供的文件中读取下一行到新的扫描器中,但是不前进到新扫描器中的下一行(这将导致输出在一行中显示所有文本,每行之间使用','分隔符)。
  3. 在函数中导入类。
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();
}

让我帮你修改代码:

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();
}

最后最重要的是,确保文本文件中的每个单词实际上都使用'/t'分隔。

我只是运行代码没有任何修改,它工作得很好!我想问题出在我的笔记本电脑上。

最新更新