Check If a String Is Numeric in Java
In this program, you will learn different techniques to check if a string is numeric or not in Java. Check if a String contains numbers Java.Recommend is to isDigit() method gives the best results. while using a regular expression you may see performance issues because the first parser has to be compiled and executed.
Example 1: Check if a string is numeric
package examples.java.w3schools.string; public class StringIsNumeric { public static void main(String[] args) { String string = "7890.123"; boolean isNumeric = true; try { Double num = Double.parseDouble(string); } catch (NumberFormatException e) { isNumeric = false; } if (isNumeric) { System.out.println(string + " is a number"); } else { System.out.println(string + " is not a number"); } } }
Here taking input string = "7890.123" and variable isNumeric is a boolean which stores the true if the string contains only digits in it.
We will pass the input string to parseDouble method in Double class. This method parses the string and converts into double.
Output:
This program compiles and runs successfully. Produces the following output.7890.123 is a number
Example 2: If String has alphabetic what will happen to the parser
public class StringIsNumeric { public static void main(String[] args) { String string = "12abc"; try { Double num = Double.parseDouble(string); } catch (NumberFormatException e) { e.printStackTrace(); } } }
In the above program, the input string is 12abc which has alphabets in it. parseDouble method can not parse alphabets. We will see now what will be the output.
Output:
java.lang.NumberFormatException: For input string: "12abc"
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at examples.java.w3schools.string.StringIsNumeric.main(StringIsNumeric.java:10)
Example 3: Check if a string is numeric or not using the isDigit method.
In the below program, We will use the isDigit method from Character class which is a static method. First, we convert the input string to char array and iterate char array using enhanced for loop. In this loop, we will take one by one character and pass the char value to the isDigit method. isDigit method returns true if char is a digit, Otherwise returns false. See the logic which is implemented in the below program.package examples.java.w3schools.string; public class StringIsNumeric { public static void main(String[] args) { boolean containsDigit = false; String input = "12abc45"; if (input != null && !input.isEmpty()) { for (char c : input.toCharArray()) { containsDigit = Character.isDigit(c); if (!containsDigit) { break; } } } if (containsDigit) { System.out.println(input + " is a Number"); } else { System.out.println(input + " is not a Number"); } } }
Output:
This program runs and produces the following output.12abc45 is not a Number
Example 4: Check if a string is numeric or not using regular expressions (regex)
Now let’s use regex -?\d+(\.\d+)? to match numeric Strings consisting of the positive or negative integer and floats.But this goes without saying, that we can definitely modify this regex to identify and cope up with a wide range of rules. Here, we’ll keep it simple.
Let’s break down this regex and see how it works:
- -? – this part identifies if the given number is negative, the dash “–” searches for dash literally and the question mark “?” marks its presence as an optional one
- \d+ – this searches for one or more digits
- (\.\d+)? – this part of regex is to identify float numbers. Here we’re searching for one or more digits followed by a period. The question mark, in the end, signifies that this complete group is optional.
For now, let’s create a method using the above regular expression:
public static boolean isNumeric(String strNum) { return strNum.matches("-?\\d+(\\.\\d+)?"); }
This method returns true if the srtNum has only digits in it otherwise returns false.
strNum = 10000 --> returns true strNum = hello123 --> returns false.
No comments:
Post a Comment
Please do not add any spam links in the comments section.