Question

I am casting my String variables to integer and double. I want to check whether the String variable contains valid Integer or Double value at runtime.

I us following code but it not works for me.

String var1="5.5";
String var2="6";
Object o1=var1;
Object o2=var2;
if (o1 instanceof Integer)
{
    qt += Integer.parseInt( var1);// Qty
}
if (o2 instanceof Double)
{
    wt += Double.parseDouble(var2);// Wt
}
Was it helpful?

Solution

Try to parse the int and catch the exception if it fails:

String var1="5.5";

try {
 qt += Integer.parseInt( var1);
}    
catch (NumberFormatException nfe) {
// wasn't an int
}

OTHER TIPS

You can use patterns to detect if a string is an integer or not :

  Pattern pattern = Pattern.compile("^[-+]?\\d+(\\.\\d+)?$");
  Matcher matcher = pattern.matcher(var1);
  if (matcher.find()){
      // Your string is a number  
  } else {
      // Your string is not a number
  }

You will have to find the correct pattern (I haven't used them for awhile) or someone could edit my answer with the correct pattern.

*EDIT** : Found a pattern for you. edited the code. I did not test it but it is taken from java2s site which also offer an even more elgant approach (copied from the site) :

 public static boolean isNumeric(String string) {
      return string.matches("^[-+]?\\d+(\\.\\d+)?$");
  }

First of all, your if condition will certainly fail, because the object reference actually points to a String object. So, they are not instances of any integer or double.

To check whether a string can be converted to integer or double, you can either follow the approach in @Bedwyr's answer, or if you don't want to use try-catch, as I assume from your comments there (Actually, I don't understand why you don't want to use them), you can use a little bit of pattern matching: -

String str = "6.6";
String str2 = "6";

// If only digits are there, then it is integer
if (str2.matches("[+-]?\\d+")) {  
    int val = Integer.parseInt(str2);
    qt += val;
}

// digits followed by a `.` followed by digits
if (str.matches("[+-]?\\d+\\.\\d+")) {  
    double val = Double.parseDouble(str);
    wt += val;
}

But, understand that, Integer.parseInt and Double.parseDouble is the right way to do this. This is just an alternate approach.

Maybe regexps could suit your needs:

public static boolean isInteger(String s) {
    return s.matches("[-+]?[0-9]+");
}

public static boolean isDouble(String s) {
    return s.matches("[-+]?([0-9]+\\.([0-9]+)?|\\.[0-9]+)");
}

public static void main(String[] args) throws Exception {
    String s1 = "5.5";
    String s2 = "6";
    System.out.println(isInteger(s1));
    System.out.println(isDouble(s1));
    System.out.println(isInteger(s2));
    System.out.println(isDouble(s2));
}

Prints:

false
true
true
false

Integer.parseInt and Double.parseDouble return the integer/double value of the String. If the String is not a valid number, the method will thrown a NumberFormatException.

String var1 = "5.5";

try {
    int number = Integer.parseInt(var1); // Will fail, var1 has wrong format
    qt += number;
} catch (NumberFormatException e) {
    // Do your thing if the check fails
}

try {
    double number = Double.parseDouble(var1); // Will succeed
    wt += number;
} catch (NumberFormatException e) {
    // Do your thing if the check fails
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top