Monday, December 15, 2014

Check if a string is a number


A very simple question. I use the traditional check-every-character way.
1. if the character is '-' but is not at the beginning of the string, return false;
2. else if there are more than one dots in the string, return false;
3. else if other characters are not digits, return false. 


public class CheckNumber {
 public boolean isNumber(String s)
 {
  if (s == null || s.length() == 0)
   return false;
  int dot = 0;
  
  for (int i = 0; i < s.length(); i++)
  {
   if (s.charAt(i) == '-')
   {
    if (i != 0)
    //System.out.println("-");
     return false;
   }
   else if (s.charAt(i) == '.')
   {
    if (dot > 0 || i == 0 || i == s.length() - 1)
    {
     //System.out.println("*");
     return false;
    }
    dot++;
   }
   else if(!Character.isDigit(s.charAt(i)))
   {
    //System.out.println(i + "isDigit");
    return false;
   }
  }
  return true;
 }
}


There are other simpler ways that use regex.


public boolean isNumber2(String str) {
  if(str==null) return false;
  return str.split("(^-)?\\d+(\\.)*\\d*").length == 0;
 }

^: beginning of the string
(-)? the hyphen appear one or no times
\d: digits
(\\.): the period appears one or no times

No comments:

Post a Comment