简体   繁体   中英

Checking if a string contains only digits and then setting it only if it doesn't contain characters other than digits

/**
 * 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;
}

So I basically need to make sure the string only contains digits, and if it contains non-digits for the method just to do nothing. The problem I have is that if there is a random character in a string of numbers ie "034343a45645" it will still set the method. Any help is appreciated thanks!

You could use String.matches(String regex) :

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

With a for loop you can just break when a non-digits is found.

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

Instead of breaking out of the loop, you could also just return. As it sounds like you don't want anything else to happen after. Thus eliminating the need for the onlyDigits variable to begin with.

Note that if mobile.length() == 0 then onlyDigits would still be true in relation to the above for loop. So assuming onlyDigits should be false if mobile is an empty string, then you could initialize it as such:

boolean onlyDigits = !mobile.isEmpty()

After checking you can then assign it if onlyDigits is true .

if (onlyDigits)
    this.mobile = mobile;

You have two problems:

First: you didn't exit the loop if the if condition is false

Second: why using loop try implement tryParse like this

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

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

add a boolean letterFound;

then at your for loop

whenever a letter is found use your else statement to set letterFound to true

then immediately stop the loop i=mobile.length() at your else statement

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM