我有一个字符串,并且我知道它只包含一个数字。
如何检查这个数字是 int 还是 float?
有很多方法可以解决您的问题。例如,您可以使用
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]+");
有关更多详细信息,请查看使用正则表达式匹配浮点数。
在 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"));
我想扩展 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");
}
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";
}