You need to check if a given string contains a valid number, and if so, convert it to binary (internal) form.
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); }
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 = Integer.parseInt(s); System.out.println("It's an int: " + ivalue); return; } catch (NumberFormatException e2) { System.out.println("Not a number:" + s); } }
A more involved form of parsing is offered by the
DecimalFormat
class,
discussed in Section 5.8.
3.142.212.160