Java 跟踪正在扫描的当前行

Java 跟踪正在扫描的当前行,java,regex,java.util.scanner,Java,Regex,Java.util.scanner,我正在使用扫描仪扫描命令提示符下的输入,我需要跟踪特定单词所在的行。如果通过命令提示输入此输入: “第一行 现在是第二行 最后一行“ 我想把它打印出来: 单词:第一行:1 字:行:1 单词:现在行:2 单词:第二行:2 字:行:2 单词最后一行:3 最后一行字:3 字行:3“ 这是我的密码: public static void main (String [] args){ Scanner scan = new Scanner(System.in); int lineNum =

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

“第一行

现在是第二行

最后一行“

我想把它打印出来:

单词:第一行:1

字:行:1

单词:现在行:2

单词:第二行:2

字:行:2

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

如果我理解你的问题,那么是的。你可以在阅读每一行的同时,将每一行中的单词拆分为

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.
}
Scanner scan=新的扫描仪(System.in);
int lineNum=1;
while(scan.hasNextLine()){
String line=scan.nextLine();
String[]words=line.split(\\s+);
for(字符串字:字){
System.out.printf(“单词:%s行:%d%n”,单词,lineNum);
}

lineNum++;//最简单的方法就是放弃使用
Scanner
进行分词

阅读整行,然后使用
String.split(“”
将行拆分为单词

如果您非常喜欢在所有方面都坚持使用
扫描仪
,您可以使用一个
扫描仪
阅读下一行,然后使用另一个
扫描仪
对您刚刚阅读的内容进行断字:

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

这样就不用担心
String.split()的正则表达式了

请尝试一次读取一行。