我正在尝试使用和理解Java的 Scanner#findWithinHorizon
方法。
我已经编写了以下使用此方法的代码,但无法理解它的工作方式。
private static void findWithinHorizon() {
String string = "Balkrishan Nagpal --> 1111, 2222, 3333";
Pattern pattern = Pattern.compile("[0-9]+");
Scanner scanner = new Scanner(string);
while (scanner.hasNext()) {
System.out.println("scanner.findWithinHorizon(pattern) = " + scanner.findWithinHorizon(pattern, 26));
}
}
当我运行上面的方法时,我得到以下输出
scanner.findWithinHorizon(pattern) = 1111
scanner.findWithinHorizon(pattern) = 2222
scanner.findWithinHorizon(pattern) = 3333
但我希望输出仅包含
scanner.findWithinHorizon(pattern) = 1111
因为我提供的地平线值为26。
我的理解是,找到匹配结果的扫描程序不会超出字符串中的索引26。
有人可以解释一下它是如何工作的吗?
最佳答案
从JavaDoc来看,它的行为符合预期:
成功找到1111
后,位置将前进到该匹配项之后。第一次匹配后,下一个findWithinHorizon
调用最多搜索26个字符。
如果在空格之后有空格以外的其他内容,则scanner.hasNext()
返回true
当前位置。 scanner.findWithinHorizon(pattern, 26)
然后搜索接下来的26
模式的字符并返回(同时前进当前模式
位置到比赛结束后)。
因此,您的代码如下进行:
0
。 scanner.hasNext()
返回true,因为字符串不仅包含空格。 scanner.findWithinHorizon(pattern, 26)
在0到26的位置范围内搜索模式,在22到25的位置找到1111
,将新位置设置为26,然后返回1111
scanner.hasNext()
返回true,因为从位置26开始的字符串不仅包含空格scanner.findWithinHorizon(pattern, 26)
在位置26至52中搜索模式,在位置28至31中找到2222
,将新位置设置为32,然后返回2222
关于java - 了解扫描仪的findWithinHorizon方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40200401/