2

入力をパターン ^[1-5]$ と照合する必要がある Java で何かをしています。入力の各行をループし、パターンに照らしてチェックし、一致しない場合はエラー メッセージを出力する while ループが必要です。

須藤コード:

while (regex_match(/^[^1-5]$/,inputLine)) {  
    print ("Please enter a number between 1 and 5! ");  
    getNextInputLine();
}  

を使用できますjava.util.Scanner.hasMatch("^[^1-5]$")が、それは行全体ではなく、1 つのトークンにのみ一致します。行全体に対して hasMatch を一致させる方法について何か考えはありますか? (区切り文字を「\n」または「\0」に設定すると機能しません。)

編集:これが不可能な場合、他の方法はありますか?

4

1 に答える 1

5

あなたが正確に何を求めているのかは明らかではありません。

  • hasNextInt()があるかどうかを知ることができますint nextInt()。次に、それが 1 ~ 5 の間であるかどうか、および別のプロンプトではないかどうかを確認できます。これは、正規表現を使用しなくても、最もクリーンなオプションのようです。

  • hasNext("[1-5]")次のトークン全体が 1 から 5 の間であるかどうかがわかりますnextInt()"005"これは、次のトークンがたとえば である場合、一致しないという点で、実際には少し厳密です。これに対応するために正規表現をより複雑にすることもできますが、その時点で上記の最初のオプションはさらに魅力的になります。

  • findInLine(String pattern)区切り文字を無視して、一致しない入力をスキップして、パターンを見つけることができます。"I want to buy 3 apples, please!"たとえば、 のような入力から数値を抽出できます。これはおそらく必要なものではありません(ただし、質問からは明らかではありません)。


もう 1 つの可能性は、おそらく次のトークンが である必要があるだけでなく、次の行全体^[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]");
}
于 2010-04-24T02:15:24.320 に答える