Checking Whether a String Is a Valid Number
Problem
You need to check if a given string contains a valid number, and if so, convert it to binary (internal) form.
Solution
Use the appropriate wrapper class’s conversion routine and
catch the
NumberFormat
Exception.
This code converts a string to a
double
:
// StringToDouble.java
public static void main(String argv[]) {
String aNumber = argv[0]; // not argv[1]
double result;
try {
result = Double.parseDouble(aNumber);
} catch(NumberFormatException exc) {
System.out.println("Invalid number " + aNumber);
return;
}
System.out.println("Number is " + result);
}Discussion
Of course, that lets you validate only numbers in the format that the designers of the wrapper classes expected. If you need to accept a different definition of numbers, you could use regular expressions (see Chapter 4) to make the determination.
There may also be times when you want to tell if a given number is an
integer number or a floating-point number.
One way is to
check for the characters
., d, or e
in the input; if it is present, convert the number as a
double, otherwise, convert it as an
int:
// GetNumber.java System.out.println("Input is " + s); if (s.indexOf('.') >0 || s.indexOf('d') >0 || s.indexOf('e') >0) try { dvalue = Double.parseDouble(s); System.out.println("It's a double: " + dvalue); return; } catch (NumberFormatException e) { System.out.println("Invalid a double: " + s); return; } else // did not contain . or d or e, so try as int. try { ivalue ...