Java 程序不会抛出所需的异常



我正在尝试开发Java中的卡片验证程序。isCardValid方法主要检查给定的卡号是否有效。我在这里指定了一个条件,它应该抛出一个IllegalArgumentException,但它没有&exit code 0

程序执行成功

下面是我的Java文件:

public class CardValidation {
  public static String getCardBrand(final String cardIsin){

        String brand = null;
        if (cardIsin == null || cardIsin.equals("")){
            log.warn("Given card BIN is null!! So returning null");
            return brand;
        }

        if (cardIsin.substring(0,2).matches("51|52|53|54|55"))
            brand = "MasterCard".toUpperCase();
        else if (cardIsin.startsWith("4"))
            brand = "Visa".toUpperCase();
        else if (cardIsin.startsWith("34") || cardIsin.startsWith("37"))
            brand = "Amex".toUpperCase();
        else if (Pattern.matches(maestroPattern,cardIsin))
            brand = "Maestro".toUpperCase();
        else if (Pattern.matches(diners, cardIsin))
            brand = "Diners".toUpperCase();
        else if (Pattern.matches(discover,cardIsin))
            brand = "Discover".toUpperCase();
        else if (doesFallInRupayRange(cardIsin))
            brand = "Rupay".toUpperCase();
        else if (cardIsin.startsWith("35"))
            brand = "JCB";
        return brand;
    }
  public static boolean isCardValid(final String cardNumber){
        if(cardNumber.matches("[^0-9]"))
            throw new IllegalArgumentException("INVALID ARGUMENT!!!! Card number should contain ONLY digits.");
        String cardBrand = getCardBrand(cardNumber);
        if (cardBrand == null)
            return false;
        if(cardBrand.equalsIgnoreCase("VISA") || cardBrand.equalsIgnoreCase("MasterCard") ||
                cardBrand.equalsIgnoreCase("DISCOVER") || cardBrand.equalsIgnoreCase("RUPAY")) {
            return cardNumber.length() == 16;
        }
        else if(cardBrand.equalsIgnoreCase("AMEX")) {
            return cardNumber.length() == 15;
        }
        else if(cardBrand.equalsIgnoreCase("MAESTRO")) {
            return cardNumber.length() == 16 || cardNumber.length() == 19;
        }
        else if(cardBrand.equalsIgnoreCase("DINERS")) {
            return cardNumber.length() == 14;
        }
        log.info("Unknown card number brand: " + cardNumber);
        return cardNumber.length() >= 12;
    }
public static boolean doesFallInRupayRange(final String isin){
       long intIsin = Long.parseLong(isin.replaceAll("[^\d]", "").substring(0,6));
        for (int row = 0; row < CardValidation.rupayRange.length; row++)
        {
            try {
                if (intIsin >= CardValidation.rupayRange[row][0] && intIsin <= CardValidation.rupayRange[row][1])
                    return true;
            }
            catch (Exception e) {
                log.error("Error while checking for RuPay: " + isin, e);
            }
        }
        return false;
    }
    public static void main (String... args){
        CardValidation.isCardValid("42424242hghghghgh");
    }
}
现在下面的代码片段应该抛出提到的Exception,不应该,因为我故意从我的向方法提供一个无效的参数?
 if(cardNumber.matches("[^0-9]"))
            throw new IllegalArgumentException("INVALID ARGUMENT!!!! Card number should contain ONLY digits.");

下面是我在控制台中得到的输出

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Process finished with exit code 0

您的正则表达式错误

试试这个:

String regex = "d+";

或者:

String regex = "[0-9]+";

因此无效的数字不匹配;因此没有例外。

为了使用上面的模式,你必须颠倒逻辑:

if ( ! input.matches(regex) ) {
  throw exception

但是请注意:你的代码是"不好的"。例如:您没有使用任何类型的抽象。您将信用卡类型表示为 string 。那简直太糟糕了。因为每段代码都处理不同的信用卡…必须知道"AMEX"的意思是"美国运通";等等......考虑使用Enum

换句话说:你真的想阅读/学习如何做好的面向对象设计!

相关内容

  • 没有找到相关文章

最新更新