2014-10-27 41 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()的正则表达式。