に私はトランプ柄表す次の式はありませ:正規表現は、テストケースで動作しますが、実際のコード
String RCARD1 = "[CDHS]{1}\\:\\d{1,2}[1-14]";
私は私のテストケースでテストしたときに期待どおりに動作しますが、ここでのテストがありますケース:
@Test
public void checkRegex() throws AssertionError {
System.out.println("Checking the correctness of card regular expressions");
String RCARD1 = "[CDHS]{1}\\:\\d{1,2}[1-14]";
String cardSymbol = "H:14";
assertTrue(cardSymbol.matches(RCARD1));
cardSymbol = "C:16";
assertFalse(cardSymbol.matches(RCARD1));
cardSymbol = "Z:5";
assertFalse(cardSymbol.matches(RCARD1));
}
これをCardコンストラクタに使用すると、常にfalseが返されます。次のコードは若干修正されていますが、結果を確認しないと、さらに解読メソッドが正常に動作します。
public Card(String cardSymbol) throws UnknownCardException {
boolean res = cardSymbol.matches(RCARD1); //fails here !!!
if (this.decypherCard(cardSymbol)) {
}
else throw new UnknownCardException();
}
ここで問題は何ですか?なぜそれは働いていないのですか?
あなたは '[1-14]'と何を一致させるつもりですか?あなたはそれが '1'と' 4'だけにマッチすることを知っていますか? 1から14までの数字を一致させる必要がある場合は、 '(?:1 [0-4] | 0?[1-9])'を使用します。 [このデモ](https://regex101.com/r/wP1lJ2/1)を参照してください - それはあなたの期待ですか? –