Java Checking Whether a String
Problem
You need to check whether a given string contains a valid number, and, if so, con-
vert it to binary (internal) form.
Solution
Use the appropriate wrapper class’s conversion routine and catch the
NumberFormatException . 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); }
Explained
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 to make the determination.
There may also be times when you want to tell if a given number is an integer num-
ber or a floating-point number. One way is to check for the characters . , d , e , or f in
the input; if one of these characters is present, convert the number as a double . Otherwise, convert it as an int :
// Part of GetNumber.java private static Number NAN = new Double(Double.NaN); /* Process one String, returning it as a Number subclass */ public Number process(String s) { if (s.matches(".*[.dDeEfF]")) { try { double dValue = Double.parseDouble(s); System.out.println("It's a double: " + dValue); return new Double(dValue); } catch (NumberFormatException e) { System.out.println("Invalid a double: " + s); return NAN; } } else // did not contain . d e or f, so try as int. try { int iValue = Integer.parseInt(s); System.out.println("It's an int: " + iValue); return new Integer(iValue); } catch (NumberFormatException e2) { System.out.println("Not a number:" + s); return NAN; } }
See Also
A more involved form of parsing is offered by the DecimalFormat class. JDK 1.5 also features the Scanner class.
A more involved form of parsing is offered by the DecimalFormat class. JDK 1.5 also features the Scanner class.
No comments:
Post a Comment