[英]get entire line with java.util.scanner.hasNext(regex)
我在Java中執行某些操作,要求輸入與^ [1-5] $模式匹配。 我應該有一個while循環,遍歷輸入的每一行,對照模式檢查它,如果沒有,則輸出一條錯誤消息。
須藤代碼:
while (regex_match(/^[^1-5]$/,inputLine)) {
print ("Please enter a number between 1 and 5! ");
getNextInputLine();
}
我可以使用java.util.Scanner.hasMatch("^[^1-5]$")
,但這將只匹配單個令牌,而不匹配整個行。 關於如何使hasMatch與整行匹配的任何想法嗎? (將分隔符設置為“ \\ n”或“ \\ 0”無效。)
編輯:如果這不可能,還有其他方法可以做到嗎?
不清楚您要問的是什么。
hasNextInt()
可以告訴您是否有一個int nextInt()
。 然后,您可以檢查它是否介於1-5之間,以及是否不提示輸入其他值。 這似乎是最干凈的選擇,甚至不使用正則表達式。
hasNext("[1-5]")
可以告訴您下一個標記的全部是否為1-5之間的nextInt()
。 這實際上有點嚴格,因為如果下一個令牌是"005"
,則它不匹配。 您可以使正則表達式更復雜以適應此情況,但是到那時,上面的第一個選項將變得更具吸引力。
findInLine(String pattern)
可以找到一個模式,忽略定界符,跳過任何不匹配的輸入。 您可以從輸入中提取數字,例如"I want to buy 3 apples, please!"
, 例如。 這可能不是您所需要的(但問題尚不清楚)。
另一種可能性是,也許不僅您需要下一個標記是^[1-5]$
,而且還希望整個下一行都與之匹配。 如果是這樣,那么您可能需要像這樣的東西:
String line = scanner.nextLine();
if (!line.matches("^[1-5]$")) {
// error message
} else {
int num = Integer.parseInt(line);
}
如果要檢查nextLine()
與該模式匹配而不消耗該行,則可以執行以下操作:
if (scanner.findInLine("^[1-5]$") != null) {
// nextLine().matches("[1-5]");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.