如何检查字符串是“float”还是“int”

问题描述 投票:0回答:4

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

如何检查这个数字是 int 还是 float?

java string integer
4个回答
23
投票

有很多方法可以解决您的问题。例如,您可以使用

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]+");

有关更多详细信息,请查看使用正则表达式匹配浮点数


1
投票

Apache Commons NumberUtils 类中。

NumberUtils.isCreatable(String) 检查 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"));

0
投票

我想扩展 Youcef LAIDANI 发布的有关正则表达式的内容。

解决方案2

或者你可以使用正则表达式

[-+]?[0-9]*\.?[0-9]+
:

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

相反,我们需要扩展正则表达式的含义。这将使我们能够编写它来满足您的需求。

str.matches("[-+]?[0-9]*\.?[0-9]+"):这是对 String 类的 matches() 方法的调用。它检查字符串 str 是否与指定的正则表达式模式匹配。

  • [-+]?:正则表达式的这一部分匹配可选的正或
    负号。 [-+] 表示连字符或加号,并且 ?使其可选。

  • [0-9]*:匹配任何数字序列 (0-9),包括零次出现(因此是 * 量词)。

  • \.?:匹配可选的小数点。反斜杠 () 是转义字符,而 .匹配任何字符,所以 .特别匹配一个句点。

  • [0-9]+:匹配一位或多位数字 (0-9)。

那么实际需要的是能够检查是否有句号,仅此而已。这可以使用正则表达式来完成,但让我们以更适合问题的方式来表达它。

选项1 如果句点之前总是有正数但不一定是数字

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

选项2 如果您想要开头的 +- 选项

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

选项3 如果你想确保句号之前有一个数字

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

如果您只想返回“整数”或“浮点”,您可以使用带有 if 语句的 str.matches 来代替。

if(string.matches("[+-]?[0-9]+")) {
    System.out.println("integer");
}

else if(string.matches("[+-]?[0-9]*\\.[0-9]*")) {
    System.out.println("float");
}
else {
    System.out.println("string");
}

-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";
}
© www.soinside.com 2019 - 2024. All rights reserved.