如果我调用scanner,我会扫描两次。先是下一个,然后是扫描仪。下一个
如果我调用scanner.hasNext(pattern)
,然后在java.util.Scanner
上使用相同的模式scanner.next(pattern)
,我会扫描两次吗
假设我有很多案例的代码(试图制作一个lexer):
import java.util.*;
import java.util.regex.Pattern;
public class MainClass {
public static void main(String[] args) {
Scanner scanner = new Scanner("Hello World! 3 + 3.0 = 6 ");
Pattern a = Pattern.compile("..rld!");
Pattern b = Pattern.compile("...llo");
while(scanner.hasNext()) {
if (scanner.hasNext(a)) {
scanner.next(a);
/*Do something meaningful with it like create a token*/
}
else if(scanner.hasNext(b)) {
scanner.next(b);
}
/*...*/
}
// close the scanner
scanner.close();
}
}
我的问题是:
hasNext(pattern)
是否以某种方式缓存了搜索结果?所以它不会搜索同一个模式两次- 这比使用
try { scanner.next(pattern) } catch { ... }
慢还是快 - 或者有没有一种更简单的方法(没有第三方库)基于regex模式进行标记化
# 1 楼答案
我认为答案是:
文档并没有说明任何可能的事情,但可能没有
另外,我问这个问题主要是因为我想用它来解析更复杂的东西,比如字符串文字,而不仅仅是空格分隔的标记。 发现扫描器仍然使用这种令牌,然后检查是否匹配。所以它现在对我的用例没有用了