2
我写了一个用于解析模板的扫描程序实用程序。
考虑代码片段:扫描仪hasNext(字符串模式)错误地返回true
String input = FileUtils.readFileToString(new File("input file path"));
Scanner scanner = new Scanner(input);
scanner.useDelimiter(System.getProperty("line.separator"));
System.out.println("Checking");
while(scanner.hasNext())
{
System.out.print(scanner.hasNext("\\s*#[^\\n]*"));
System.out.println(" : " + scanner.nextLine());
}
输入文件的内容:
# Line 1
#######################
# Check
# Matched with spaces
#
// End of file
注:文件行的结尾是不存在的输入。
输出产生:
Checking
true : # Line 1
true : #######################
true :
true : # Check
true : # Matched with spaces
true : #
false :
false :
我的问题是,为什么是它的第三行hasNext(),即使它不以“#”开始返回true?
任何帮助,将不胜感激。
寻找下一个标记与在文档的hasNext(模式)改为:“如果下一个完整标记与指定模式匹配,则返回true。一个完整的标记是由匹配分隔符模式的输入前缀和后缀。“我的分隔符是新行char,因此这里的完整标记应该是“”,即空行。我错了吗? – Pratham 2014-10-28 13:27:50
有一点,它们所指的分隔符模式是'\\ s'空格。 'hasNext'不知道你的模式。 – weston 2014-10-28 13:59:51
在我的代码中,我将分隔符更改为新行scanner.useDelimiter(System.getProperty(“line.separator”))。 hasNext以完整的令牌运行。同样如文档“分隔模式”中所述\“可以返回空的标记,因为它一次只传递一个空格。”因此我假定它会返回hasNext将运行的空标记。正确吗? – Pratham 2014-10-28 14:04:55