2013-11-22 90 views
0

解決了,但我的聲望太低,無法回答我自己的問題。掃描儀(行)和掃描儀(System.in)行爲不端/人爲錯誤

掃描儀輸入; Scanner lineScanner;

input = new Scanner(System.in); 
lineScanner = new Scanner(line); 
String line; 
char x; 

askUserForInputFile(); //user selects input txt file. Method definitely works. 

do { 
    line = input.nextLine(); 
    if (line.length() < 6) 
     continue; 
     out.printf("debug0\n%s", line); //<----problem 

    do { 
     out.print("debug1\n"); 
     x = lineScanner.next().charAt(0); //<-----problem 
     out.print("debug2\n"); 

//more code 

我想逐行閱讀文件並僅在其長度()=> 6時進行處理。出現了什麼問題?

控制檯:

debug0 
    Exception in thread "main" <scanned line, displayed correctly>debug 
    java.util.NoSuchElementException 
+1

你確定這編譯? line:'lineScanner = new Scanner(line);' - 'line'定義在哪裏? –

+0

也許你需要一個文件對象 –

+0

我找到了解決方案,我需要在使用line.next()之前聲明String行。不幸的是,我沒有足夠的信譽來回答我自己的問題。 – user2979713

回答

0

您需要在與lineScanner = new Scanner(line);每次迭代的開始你的lineScanner復位。它目前正嘗試每次從第一行讀入。

0

也許你想這樣的事情

public static File askUserForInputFile() throws IOException { 
    System.out.println("Enter a file name: "); 
    String filename = input.nextLine(); 

    return new File(fileName); 
} 

使用此方法

Scanner input = new Scanner(System.in); 
File file = askUserForInputFile(); 

input = new Scanner(file); 

Scanner lineScanner; 
String line; 
char x; 

while (input.hasNextLine()) { 
    String line = input.nextLine(); 

    if (line.length() < 6) 
     out.printf("debug0\n%s", line); 
    else { 
     out.print("debug1\n"); 
     x = lineScanner.next().charAt(0); //<-----problem 
     out.print("debug2\n"); 
    } 
}