java如何从任意“字符串”输入确定“数字”数据类型
我已经试着搜索了很多关于它的信息,但是没有找到一个具体的解决方案
我正在开发一个rest服务(使用Jax-RS),为其提供3个数字输入,但对于每个输入,实际的数据类型在编译时是未知的。例如;“num1”可以是任何数字,即int、long、float或double等,类似于“num2”和“num3”
@GET
@Path("func/{num1}/{num2}/{num3}")
public String function (@PathParam("num1") String num1, @PathParam("num2") String num2, @PathParam("num3") String num3) {
// Determine the data type of "num1", "num2" and "num3"
// Perform any arithmetic operation on "num1", "num2" and "num3" and return the result;
}
如何确定每个输入的数据类型以执行任何计算
目前,我使用一系列包装器检查类型。解析xxx方法,如下代码所示,但这种方法似乎不正确
private Boolean isByte(String s) {
try {
Byte.parseByte(s);
return true;
} catch (NumberFormatException ex) {
return false;
}
}
private Boolean isInt(String s) {
try {
Integer.parseInt(s);
return true;
} catch (NumberFormatException ex) {
return false;
}
}
private Boolean isLong(String s) {
try {
Long.parseLong(s);
return true;
} catch (NumberFormatException ex) {
return false;
}
}
private Boolean isStrFloat(String str) {
try {
Float.parseFloat(str);
return true;
} catch (NumberFormatException ex) {
return false;
}
}
private Boolean isStrDouble(String str) {
try {
Double.parseDouble(str);
return true;
} catch (NumberFormatException ex) {
return false;
}
}
或者我应该对所有输入使用biginger/BigDecimal吗
# 1 楼答案
您可能真的不需要检测可能的最小数字类型,只需使用
Double
就可以了。如果传入参数恰好是字节大小的,它将毫无问题地进行解析:但您也可以使用
java.text.NumberFormat
来解析任何传入号码:检查Numberformat的javadoc中的所有选项
# 2 楼答案
使用JAX-RS,您可以仅对数字强制匹配此方法
该方法如下所示:
如果数字不是您期望的,那么客户机将得到一个
404 Not Found
注意我是如何将参数的类型设置为
Double
。JAX-RS规范规定,具有valueOf(String)
方法的所有类型都可以在方法参数中使用。因为我们强制参数的类型,所以在这里可以安全地转换为Double