NoSuchElementException 在 - Java
NoSuchElementException in - Java
我正在尝试从文本文件中读取数据,然后将其存储到数组中。我假设每行一个词。我在这里得到 NoSuchElementException
:
while (s.hasNextLine())
{
text = text + s.next() + " ";
}
这是我的代码:
public class ReadNote
{
public static void main(String[]args)
{
String text = readString("CountryList.txt");
System.out.println(text);
String[] words = readArray("CountryList.txt");
for (int i = 0; i < words.length; i++)
{
System.out.println(words[i]);
}
}
public static String readString(String file)
{
String text = "";
try{
Scanner s = new Scanner(new File(file));
while (s.hasNextLine())
{
text = text + s.next() + " ";
}
} catch(FileNotFoundException e)
{
System.out.println("file not found ");
}
return text;
}
public static String[] readArray(String file)
{
int ctr = 0;
try {
Scanner s1 = new Scanner(new File(file));
while (s1.hasNextLine())
{
ctr = ctr+1;
s1.next();
}
String[] words = new String[ctr];
Scanner s2 = new Scanner(new File(file));
for ( int i = 0; i < ctr; i++)
{
words [i] = s2.next();
}
return words;
} catch (FileNotFoundException e) { }
return null;
}
}
这是消息。
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1371)
at ReadNote.readString(ReadNote.java:29)
at ReadNote.main(ReadNote.java:13)
据我所知,您的代码存在 2 个问题:
- 您忘记检查第二个
Scanner s2
的 hasNextLine()
。
使用 Scanner
时,您需要检查下一行是否有 hasNextLine()
,它将 return null
at EOF
.
- 您可能希望在
while
循环中使用 s.nextLine()
而不是 s.next()
,因为您正在检查 while (s1.hasNextLine())
。一般来说,您必须将您的.hasNext...
与您的.next...
相匹配。
对于您在 readString
中遇到的特定异常:
while (s.hasNextLine()) {
text = text + s.next() + " ";
}
您需要在循环守卫中调用 s.hasNext()
,或者在正文中使用 s.nextLine()
。
如所述。
您的文件末尾有一个额外的换行符。
hasNextLine()
检查缓冲区中是否有另一个 linePattern。
hasNext()
检查缓冲区中是否有可解析的标记,由扫描器的定界符分隔。
您应该将您的代码修改为以下之一
while (s.hasNext()) {
text = text + s.next() + " ";
}
while (s.hasNextLine()) {
text = text + s.nextLine() + " ";
}
我正在尝试从文本文件中读取数据,然后将其存储到数组中。我假设每行一个词。我在这里得到 NoSuchElementException
:
while (s.hasNextLine())
{
text = text + s.next() + " ";
}
这是我的代码:
public class ReadNote
{
public static void main(String[]args)
{
String text = readString("CountryList.txt");
System.out.println(text);
String[] words = readArray("CountryList.txt");
for (int i = 0; i < words.length; i++)
{
System.out.println(words[i]);
}
}
public static String readString(String file)
{
String text = "";
try{
Scanner s = new Scanner(new File(file));
while (s.hasNextLine())
{
text = text + s.next() + " ";
}
} catch(FileNotFoundException e)
{
System.out.println("file not found ");
}
return text;
}
public static String[] readArray(String file)
{
int ctr = 0;
try {
Scanner s1 = new Scanner(new File(file));
while (s1.hasNextLine())
{
ctr = ctr+1;
s1.next();
}
String[] words = new String[ctr];
Scanner s2 = new Scanner(new File(file));
for ( int i = 0; i < ctr; i++)
{
words [i] = s2.next();
}
return words;
} catch (FileNotFoundException e) { }
return null;
}
}
这是消息。
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1371)
at ReadNote.readString(ReadNote.java:29)
at ReadNote.main(ReadNote.java:13)
据我所知,您的代码存在 2 个问题:
- 您忘记检查第二个
Scanner s2
的hasNextLine()
。
使用Scanner
时,您需要检查下一行是否有hasNextLine()
,它将 returnnull
atEOF
. - 您可能希望在
while
循环中使用s.nextLine()
而不是s.next()
,因为您正在检查while (s1.hasNextLine())
。一般来说,您必须将您的.hasNext...
与您的.next...
相匹配。
对于您在 readString
中遇到的特定异常:
while (s.hasNextLine()) {
text = text + s.next() + " ";
}
您需要在循环守卫中调用 s.hasNext()
,或者在正文中使用 s.nextLine()
。
如
您的文件末尾有一个额外的换行符。
hasNextLine()
检查缓冲区中是否有另一个 linePattern。
hasNext()
检查缓冲区中是否有可解析的标记,由扫描器的定界符分隔。
您应该将您的代码修改为以下之一
while (s.hasNext()) {
text = text + s.next() + " ";
}
while (s.hasNextLine()) {
text = text + s.nextLine() + " ";
}