正则表达声明

use*_*643 1 java regex text-files java.util.scanner

我从来没有对正则表达式很好,我似乎无法得到这个......

我试图匹配这些行的语句(这些是我正在阅读的文本文件中的两行)

Lname Fname 12.35 1
Jones Bananaman 7.1 3
Run Code Online (Sandbox Code Playgroud)

目前我正在使用这个语句

reader.hasNext("\\w+ \\w+ \\d*\\.\\d{1,2} [0-5]")
Run Code Online (Sandbox Code Playgroud)

但它没有进入while语句.当我删除while时,程序读取文本文件就好了.代码段是这样的:

private void initializeFileData(){
    try {
        Scanner reader = new Scanner(openedPath);

        while(reader.hasNext("\\w+ \\w+ \\d*\\.\\d{1,2} [0-5]")){
            employeeInfo.add(new EmployeeFile(reader.next(), reader.next(), reader.nextDouble(), reader.nextInt(), new employeeRemove()));
        }
        for(EmployeeFile element: employeeInfo){
            output.add(element);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

FGr*_*reg 6

使用\s字符类作为单词之间的空格:

while(reader.hasNext("\\w+\\s\\w+\\s\\d*\\.\\d{1,2}\\s[0-5]"))
Run Code Online (Sandbox Code Playgroud)

更新:

根据Scanner类的javadoc ,默认情况下它使用空格分割它的标记.您可以使用useDelimiter(String pattern)方法更改它使用的分隔符Scanner.

private void initializeFileData(){
    try {
        Scanner reader = new Scanner(openedPath).useDelimiter("\\n");
        ...
        while(reader.hasNext("\\w+\\s\\w+\\s\\d*\\.\\d{1,2}\\s[0-5]")){
        ...
Run Code Online (Sandbox Code Playgroud)

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html