2010-04-24 60 views
2

我在Java中做了一些事情,需要將輸入與模式^ [1-5] $進行匹配。我應該有一個while循環循環遍歷每一行輸入,根據模式檢查它,如果沒有輸出錯誤消息。用java.util.scanner.hasNext得到整行(正則表達式)

須藤代碼:

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」不起作用。)

編輯:如果這不可行,還有其他方法可以嗎?

+0

掃描儀沒有這樣的方法: http://java.sun.com/javase/6/docs/api/java/util/Scanner.html – 2010-04-24 01:43:40

回答

5

目前還不清楚你要求的是什麼。

  • hasNextInt()可以告訴你,如果有一個int nextInt()。然後你可以檢查它是否在1-5之間,並且如果它沒有提示另一個。這似乎是最乾淨的選項,甚至沒有使用正則表達式。

  • hasNext("[1-5]")可以告訴你整個下一個標記是否爲1到2之間的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]"); 
}