我正试图让一个Scanner读取一个文本文件的输入,将该输入放入一个String中,拥有该String的StringTokenizer,然后拥有一个String[],该数组的每个元素都是该StringTokeniizer的令牌。这样做的目的是从文本文件中获取输入文本的String[],使数组的每个元素都是文本文件中的一个单词。然而,到目前为止,我的代码生成了一个NoSuchElementFound异常。
Scanner f = new Scanner( "input.txt" ); // Yes, I have the file path here, I changed it though.
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("output.txt" );
String temp = "";
String cString = "";
while( ( cString = f.nextLine() ) != null ) { // Line where exception occurs
temp += cString;
}
StringTokenizer everythingTokens = new StringTokenizer( temp );
String[] everything = new String[ everythingTokens.countTokens() ];
for( int i = 0; i < everything.length; i++ ) {
everything[ i ] = everythingTokens.nextToken();
}
out.println( everything[ 0 ] );
这是错误信息
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1585)
at gift1.main(gift1.java:21)
Java Result: 1
文本文件中的输入是
Hey,
How are you?
为什么会发生这种情况,我该如何解决?
这不是使用扫描仪的方式。你应该改为:
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
// work with your line here
}
请看一看扫描程序API,你会发现它不会返回空,如果它的行数不足。相反,它抛出了一个。。。。NoSuchElementException。我认为你把它的用途与BufferedReader的用途混淆了,它们实际上是两个完全不同的物种。
更改为此--
while( f.hasNextLine() ) {
cString = f.nextLine();
temp += cString;
}