我有一个字符串,并且知道它只包含一个数字。
如何检查这个数字是整数还是浮点数?
解决问题的方法有很多。例如,您可以使用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]+");
更多细节请查看使用正则表达式匹配浮点数。
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"));
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";
}
3.
或仅.
。 - jbx\\d
仍然可以代替[0-9]
,但也许在这种情况下意图更清晰(因为它正在解析一个数字)。 - jbxInteger.parseInt("1")
和Float.parseFloat("1")
两者都不会抛出异常。 - 91StarSky