2014-10-27 42 views
2

我正在使用掃描程序掃描來自命令提示符的輸入,並且需要跟蹤特定單詞所在的行。如果我通過在命令提示符下輸入以下輸入:跟蹤正在掃描的當前行

「第一線

現在二線

最後最後一行的」

我希望它打印出來:

「字:第一行:1

Word:line line:1

字:現在線上:2

字:第二行:2

字:一行行:2

字最後一行:3

字最後一行:3

字line line:3「

這是我的代碼:

public static void main (String [] args){ 
    Scanner scan = new Scanner(System.in); 
    int lineNum = 1; 
    while(scan.hasNext()) 
    { 
     if(scan.next().matches("[\\n]") 
      lineNum++; 
     System.out.println("Word: " + scan.next() + " line: " + lineNum); 
    } 
} 

我已經嘗試了很多不同的正則表達式模式,但是我沒有試過似乎都是這樣做的。我已經嘗試了一些其他方法來增加計數器,如增加scan.hasNextLine,但沒有成功,我覺得必須有一個非常簡單的方法來做到這一點,我只是沒有找到它。

+1

嘗試一次讀取一行。 – khelwood 2014-10-27 21:26:50

回答

0

如果我理解你的問題,那麼是的。您可以通過閱讀而Scanner.hasNextLine()每一行,然後以某種分裂詞語的線一樣

Scanner scan = new Scanner(System.in); 
int lineNum = 1; 
while (scan.hasNextLine()) { 
    String line = scan.nextLine(); 
    String[] words = line.split("\\s+"); 
    for (String word : words) { 
     System.out.printf("Word: %s line: %d %n", word, lineNum); 
    } 
    lineNum++; // <-- then increment the line count. 
} 
0

最簡單的方法是放棄使用Scanner做斷字做到這一點!

整行讀入,然後用String.split(" ")將行分解成單詞。

如果你與Scanner堅持對各方面的敏銳死了,你可以使用一個Scanner下一行讀取,然後用另一Scanner做斷詞是什麼,你只是在讀:

String wholeLine = scan.nextLine(); 
Scanner innerScan = new Scanner(wholeLine); 
lineNum++; 
while (innerScan.hasNext()) 
    System.out.println("Word: " + innerScan.next() + " line: " + lineNum); 

這樣可以節省您擔心String.split()的正則表達式。