检查字符串是否仅包含数字,然后仅在数字不包含数字时才设置

时间:2017-04-09 02:37:53

标签: java for-loop

/**
 * Set the person's mobile phone number
 */
public void setMobile(String mobile) {
    for (int i = 0; i < mobile.length(); i++) {
if (!Character.isDigit(mobile.charAt(i))) {}
}
this.mobile = mobile;
}

所以我基本上需要确保字符串只包含数字,如果它包含方法的非数字只是为了什么都不做。 我遇到的问题是,如果一串数字中有一个随机字符,即“034343a45645”,它仍然会设置该方法。 感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

您可以使用String.matches(String regex)

boolean onlyDigits = mobile.matches("[0-9]+");

使用for循环,您可以在找到非数字时中断。

boolean onlyDigits = true;
for (int i = 0; i < mobile.length(); i++) {
    if (!Character.isDigit(mobile.charAt(i))) {
        onlyDigits = false;
        break;
   }
}

您也可以返回,而不是打破循环。听起来你不希望发生任何其他事情。因此,无需开始onlyDigits变量。

请注意,如果mobile.length() == 0,那么onlyDigits对于上述for循环仍然是true。因此,如果onlyDigitsfalse,如果mobile是空字符串,那么您可以将其初始化为:

boolean onlyDigits = !mobile.isEmpty()

检查完毕后,如果onlyDigitstrue,则可以进行分配。

if (onlyDigits)
    this.mobile = mobile;

答案 1 :(得分:1)

你有两个问题:

首先:如果if条件为假,则没有退出循环

第二:为什么使用循环尝试实现像这样的tryParse

boolean tryParseInt(String value) {  
     try {  
         Integer.parseInt(value);  
         return true;  
      } catch (NumberFormatException e) {  
         return false;  
      }  
}

if(tryParseInt(mobile)){
  this.mobile = mobile;
}

答案 2 :(得分:0)

添加boolean letterFound;

然后在你的for循环

每当找到信件时,请使用else语句将letterFound设为true

然后立即停止i=mobile.length()语句

上的循环else