Java - 字符串输入错误,允许额外输入

时间:2017-08-22 13:54:14

标签: java string input

我想制作一个if语句,其中用户必须输入一个16位数的字符串,如果它们失败,则必须再次尝试。我之前用c ++做过这个,但是不知道如何在java中做到这一点。到目前为止这是我的代码。我还希望卡号以这种格式保存" xxxx xxxx xxxx xxxx"像一个卡号。我应该以那种格式退回吗?

public PersonalAccount(String user_firstName, String user_lastName, String user_accountNumber, String street, String town, String postcode, String user_cardNumber, char user_cardType) {  
    super(user_firstName, user_lastName, user_accountNumber, street, town, postcode);

    if (user_cardNumber.length() == 16) {    
        cardNumber = user_cardNumber; 
    } else {
        System.out.println("Incorrect card number length");
    }

    cardType = user_cardType;
}

2 个答案:

答案 0 :(得分:0)

应该抛出异常(EG IllegalArgumentException)而不是向控制台打印错误消息......

通过这种方式,调用者可以捕获异常并对其进行操作。

至于格式,如果你想格式化字符串,即没有空格,在每四个数字后面都有空格,你应该尝试这样的事情:

public String formatCardNumber(String cardNumber)
{
   StringBuilder sb = new StringBuilder(20);
   for ( int i = 0; i < 16; i+=4)
   {
      sb.append(' ').append(user_cardNumber, i, i + 4);
   }
   return sb.substring(1);
}

答案 1 :(得分:0)

你可以使用这样的方法

  1. 检查是否输入了16位数字
  2. 抛出异常以指示输入不正确
  3. 如果格式正确,则每隔四位数后返回带空格的值。

    String checkCardnumber(String user_cardNumber) {
      if(!user_cardNumber.matches("[\\d]{16}")) {
        throw new IllegalArgumentException();
      } else {
        return user_cardNumber.replaceAll("([\\d]{4})([\\d]{4})([\\d]{4})([\\d]{4})", "$1 $2 $3 $4");
      }
    }