0

[a、b、v、^];

これが私がこれまでに持っているものです:

do {
    System.out.print("Enter a two variable logical expression, no spaces: ");    // 'v' for or, '^' for and.
    expression = type.nextLine();
}
while ((expression.length() != 3) || !((expression.toUpperCase()).matches("[AB^V]")));

ループは、文字列の長さが 3 文字でない場合、または文字列内の文字が許可されていない場合にのみ続行すると想定されています。

a^b のテスト文字列を入力しましたが、ループが続きます。

これを修正するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

3

正しい正規表現は[AB^V]+. 実際、元の式は長さ 1 の文字列にのみ一致します。

((expression.toUpperCase()).matches("[AB^V]+"))

^[との間](つまり、文字クラス) にあるため、エスケープする必要はありません。

編集: 実際に^は、文字クラスの先頭にある場合 (のように[\\^ABV]+) エスケープする必要がありますが、他の文字が前にある場合はエスケープする必要はありません。

于 2013-03-01T04:26:19.853 に答える