使用扫描仪获取NoSuchElementFound

时间:2012-07-23 00:34:45

标签: java java.util.scanner

我正在尝试让Scanner读取文本文件的输入,将该输入放入String中,使用该String的StringTokenizer,然后使用String [],该数组的每个元素都是一个标记那个StringTokenizer。这样做的目的是从文本文件中获取输入文本的String [],使得数组的每个元素都是文本文件中的单词。但是,到目前为止我的代码生成了一个NoSuchElementFound Exception。

    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?

为什么会发生这种情况,我该如何解决?

2 个答案:

答案 0 :(得分:2)

这不是您使用扫描仪的方式。你改为:

while (scanner.hasNextLine()) {
   String line = scanner.nextLine();
   // work with your line here
}

请查看Scanner API,如果线路用完,它将不会返回null。相反,它会抛出一个...... NoSuchElementException。我认为你将它的使用与BufferedReader的使用混淆,它们实际上是两个完全不同的物种。

答案 1 :(得分:1)

更改为 -

while( f.hasNextLine() ) {
    cString = f.nextLine();
    temp += cString;
}