当前位置: 首页 > 知识库问答 >
问题:

Scanner hasNext(字符串模式)错误地返回true

尹兴生
2023-03-14

我已经编写了一个用于解析模板的scanner实用程序
考虑一下代码片段:

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,即使它不以 '#' ?
任何帮助将不胜感激。

共有1个答案

郦兴德
2023-03-14

因为有下一个

如果下一个标记与从指定字符串构造的模式匹配,则返回true。

空行不包含令牌,因此它正在从第4行查找下一个令牌。

 类似资料:
  • 场景:用于编辑产品详细信息的HTML文档被编码为ISO-8859-1,并将POST数据发送到PHP文件(也被编码为ISO-8859-1)。这个PHP文件有mysql_real_escape_string-functions来清理输入。数据库/MySQL server字符集为UTF-8。问题是,当POST字符串中包含斯堪的纳维亚字母(ä,ö,å)时,mysql_real_escape_string返

  • 返回当前IBAN实例的地址字符串。 调用: web3.eth.Iban.toString() 参数: 无 返回值: String: IBAN地址 示例代码: var iban = new web3.eth.Iban('XE7338O073KYGTWWZN0F2WZ0R8PX5ZPPZS'); iban.toString(); > 'XE7338O073KYGTWWZN0F2WZ0R8PX5ZPP

  • GETRANGE key start end 返回key 中字符串值的子字符串,字符串的截取范围由start 和end 两个偏移量决定(包括start 和end 在内)。可以使用负值,字符串右面下标是从-1开始的。 注意返回值处理: 1: start>=length, 则返回空字符串 2: stop>=length,则截取至字符结尾 3: 如果start 所处位置在stop右边, 返回空字符串

  • 我需要发布一个请求包含:一个定义为字符串的xml和一个json。我在正确设置内容和处理JToken方面遇到了问题。 在Fiddler中,原始请求如下所示: 内容类型:多部分/表单数据;boundary=----------------------------acebdf13572468用户代理:Fiddler授权:基本QURNSU46QURNSU4=内容长度:888主机:本地主机 --------

  • 问题内容: 我有一个字符串“ ́aúlt”,我想根据字符位置等获得操纵的长度。问题在于第一个数字被计数两次,或者我猜数字在位置0而数字在位置1。 Python中是否有任何可能的方式来将像“ ́”这样的字符表示为1? 我正在将UTF-8编码用于输出的实际代码和网页。 编辑:关于为什么我需要这样做的一些背景。我正在做一个项目,该项目将英语翻译成塞内卡(一种美洲原住民语言),而„ ́出现了很多。某些单词

  • 问题内容: 我试图逐行获取两个文件之间的差异,Python总是返回false。即使我比较相同的文件,Python(几乎)总是返回false。高飞的例子,但它在Python3.4.3上复制了我的问题。 Python正确地识别出第一行是相同的,但是之后的所有内容都是错误的。有人可以复制吗?有任何想法吗? 问题答案: 第一次迭代结束后,您已经用尽了迭代器,需要返回到文件的开头。 你只检查的第一线对的线,