簡體   English   中英

使用java.util.scanner.hasNext(regex)獲得整行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM