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