Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

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

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 i.e. "034343a45645" it will still set the method. Any help is appreciated thanks!

like image 992
hK- Avatar asked Sep 11 '25 17:09

hK-


2 Answers

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;
like image 94
vallentin Avatar answered Sep 13 '25 08:09

vallentin


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;
}
like image 35
Fady Saad Avatar answered Sep 13 '25 06:09

Fady Saad