java scanner hasnext(pattern)与空格冲突

时间:2013-05-17 10:38:21

标签: java regex java.util.scanner

我写了这个正则表达式([0-9]{2}:){2}[0-9]{2},[0-9]{3} -> ([0-9]{2}:){2}[0-9]{2},[0-9]{3}来匹配像00:16:31,600 -> 00:16:35,700这样的srt时间格式,当我像这样使用它时它工作正常:someString.matches(timeSpanPattern)但是当我在hasNext(pattern)中使用它时像下面的代码一样,它总是返回false,我认为这是因为->之前和之后的空格。是否有任何替代或代码来防止这种情况?我试过useDelimiter函数,但它不起作用(也许我错误地使用了这个函数)

final String timeSpanPattern = "([0-9]{2}:){2}[0-9]{2},[0-9]{3} -> ([0-9]{2}:){2}[0-9]{2},[0-9]{3}";
.
.
.

Scanner i = new Scanner(System.in).useDelimiter("\n");

while (i.hasNext(timeSpanPattern)) {
    line = i.next(timeSpanPattern);
    forbiddenTimes.add(line);
}
.
.
.

2 个答案:

答案 0 :(得分:3)

重新阅读您的问题,我发现了实际问题:

Scanner i = new Scanner(System.in).useDelimiter(System.lineSeparator());

UNIX系统上的行分隔符为"\n",Microsoft Windows系统上为"\r\n"

答案 1 :(得分:0)

useDelimiter功能的使用不正确。你(i)应该以这种方式使用它:

Scanner i = new Scanner(System.in);
i.useDelimiter("\n");