如何检查一个字符串是否为'float'或'int'类型

6

我有一个字符串,并且知道它只包含一个数字。

如何检查这个数字是整数还是浮点数?

3个回答

22

解决问题的方法有很多。例如,您可以使用try{}catch(){}

解决方案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
    }
}

解决方案2

或者您可以使用正则表达式 [-+]?[0-9]*\.?[0-9]+

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

更多细节请查看使用正则表达式匹配浮点数


建议作为解决方案的正则表达式无效。它不接受负号,并且接受奇怪的字符串,如3.或仅. - jbx
@jbx 这是正确的,这是很久以前我开始学习正则表达式时纠正我的错误,希望这可以帮助更多人。 - Youcef LAIDANI
是的,新的看起来不错。\\d 仍然可以代替 [0-9],但也许在这种情况下意图更清晰(因为它正在解析一个数字)。 - jbx
Integer.parseInt("1")Float.parseFloat("1")两者都不会抛出异常。 - 91StarSky

2
Apache CommonsNumberUtils 类中。
NumberUtils.isCreatable(String) 可以检查一个字符串是否为有效的 Java 数字。
    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"));

1
但这并不会告诉我们字符串是“Int”还是“Float”,对吧?无论如何,它都会返回“true”,对吧?这只会告诉我们它是否是某种数字。我们需要另一个检查来确认它是Int还是Float。 - BATMAN_2008

-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
你的回答可以通过提供更多支持性的信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到关于如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接