跟踪正在扫描的当前行

时间:2014-10-27 21:23:37

标签: java regex java.util.scanner

我正在使用扫描程序从命令提示符扫描输入,我需要跟踪特定单词的行。如果我通过命令提示输入此输入:

“第一行

现在第二行

最后一行“

我希望它打印出来:

“Word:第一行:1

Word:line line:1

Word:现在行:2

Word:第二行:2

Word:line line:2

Word最后一行:3

单词最后一行:3

字线: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的增量,但没有成功,我觉得必须有一个非常简单的方法来做到这一点,我只是没有找到它。

2 个答案:

答案 0 :(得分: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.
}

答案 1 :(得分: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()的正则表达式。