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)
使用\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