2016-07-18 20 views
0

我知道除了掃描預定義的primitive類型外,我還可以掃描自己的用戶定義模式,這在掃描更復雜的數據時很有用。我正在談論Scanner.next(String pattern)方法。 然而,我在書裏讀到的Java,有一個段落,說在Java中使用正則表達式掃描的缺點是什麼

「有使用正則表達式掃描時一個警告。該 模式對下一個輸入令牌只匹配,因此,如果您 模式包含一個分隔符永遠不會匹配。「

我真的不明白這是什麼意思以及在哪些情況下這種類型的掃描是不適用

+0

你指的是哪本書? SO不是一個任意引用垃圾的驗證網站。 – EJP

+0

Java中的思考,第4版 - Bruce Eckel –

回答

2

假設你有一個逗號,作爲分隔符。現在不知何故(也許它是由別人提供的),你已經想出了一個模式ab,cd。由於該模式包含分隔符,因此掃描程序將首先嚐試將ab,cdab匹配,然後再與cd匹配,從而導致不匹配。

請注意,這是一個警告,它不一定是你會很容易遇到的東西。

+0

你能解釋你的例子中的分隔符和模式是如何使用的嗎?我認爲**圖案將被掃描儀**用作分隔符。這怎麼可能是兩件不同的事情? – Codebender

+0

@Codebender就像'nextInt()'會掃描一個整數(用'\ n'作爲分隔符,以及其他默認分隔符),'next(String pattern)'會掃描下一個匹配模式的輸入。輸入首先根據分隔符進行標記,然後匹配完成,無論是正則表達式模式,整數,行等。 – Kayaman

+0

非常感謝。我只注意到'next(pattern)'方法存在。我正在考慮使用'useDelimiter(pattern)'作爲分隔符來使用模式。 – Codebender