6

I have a string, and I know that it only contains a number.

How can I check if this number is int or float?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Ali
  • 145
  • 1
  • 2
  • 7

3 Answers3

22

There are many ways to solve your problem. For example, you can use try{}catch(){}:

Solution 1

public static void main(String[] args) {
    String str = "5588";

    // Check if int
    try {
        Integer.parseInt(str);
    } catch(NumberFormatException e) {
        // Not int
    }

    // Check if float
    try {
        Float.parseFloat(str);
    } catch(NumberFormatException e) {
        // Not float
    }
}

Solution 2

Or you can use regex [-+]?[0-9]*\.?[0-9]+:

boolean correct = str.matches("[-+]?[0-9]*\\.?[0-9]+");

For more details, take a look at Matching Floating Point Numbers with a Regular Expression.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Youcef LAIDANI
  • 55,661
  • 15
  • 90
  • 140
  • The regex suggested as a solution is not valid. It does not accept negative sign, and it accepts weird strings like `3.` or even just `.` – jbx Jun 15 '18 at 21:21
  • @jbx this is correct and this was from a long time when I start learning regex I fix my mistake hope this can help more – Youcef LAIDANI Jun 15 '18 at 21:30
  • Yes the new one looks good. `\\d` can still work instead of `[0-9]` but maybe in this case the intent is clearer (since it is parsing a number). – jbx Jun 19 '18 at 08:24
  • both `Integer.parseInt("1")` and `Float.parseFloat("1")` will not throw exception – 91StarSky May 22 '21 at 01:28
2

In the Apache Commons NumberUtils class.

NumberUtils.isCreatable(String) which checks whether a String is a valid Java number or not.

    log.info("false {} ", NumberUtils.isCreatable("NA.A"));
    log.info("true {} ", NumberUtils.isCreatable("1223.589889890"));
    log.info("true {} ", NumberUtils.isCreatable("1223"));
    log.info("true {} ", NumberUtils.isCreatable("2.99e+8"));
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
PremKumarR
  • 461
  • 1
  • 6
  • 19
  • 1
    But this will not inform whether the String is `Int` or `Float` right? It will return `true` irrespective of it, right? This will inform only if its some sort of number. We need a another check to confirm if its Int or Float. – BATMAN_2008 Sep 16 '21 at 15:16
-1
public static String getPrimitiveDataTypeForNumberString(String str) {
    try {
        if (str.matches("^[\\p{Nd}]+[Ll]$")) {
            str = str.substring(0, str.length() - 1);
            long l = Long.parseLong(str);
            if (l <= Long.MAX_VALUE) {
                return "Long";
            }
        } else if (str.matches("^[\\p{Nd}]+[.][\\p{Nd}Ee]+[Ff]$")) {
            str = str.substring(0, str.length() - 1);
            float f = Float.parseFloat(str);
            if (f <= Float.MAX_VALUE) {
                return "Float";
            }
        } else if (str.matches("^[\\p{Nd}]+[.][\\p{Nd}Ee]+[Dd]$")) {
            str = str.substring(0, str.length() - 1);
            double d = Double.parseDouble(str);
            if (d <= Double.MAX_VALUE) {
                return "Double";
            }
        } else if (str.matches("^[\\p{Nd}]+$")) {
            double d = Double.parseDouble(str);
            if (d <= Integer.MAX_VALUE) {
                return "Integer";
            } else if (d <= Long.MAX_VALUE) {
                return "Long";
            } else if(d <= Float.MAX_VALUE) {
                return "Float";
            } else if(d <= Double.MAX_VALUE) {
                return "Double";
            }
        } else if (str.matches("^[\\p{Nd}]+[.][\\p{Nd}Ee]+$")) {
            double d = Double.parseDouble(str);
            if (d > Float.MAX_VALUE) {
                return "Double";
            }
            return "Float";
        }
    } catch (NumberFormatException e) {
    }

    return "Unknown";
}
  • 2
    Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Mar 03 '22 at 20:34