我有一个ResultSet,我迭代,我创建一个像view(html)的报告。 问题是有些列返回Long值(作为SQL中数学函数的结果)。
有没有一种简单的方法可以通过DataType识别这个值?
让我们说我想做这样的事情
String x = rs.getString(1);
if(MyUtilClass.isOfTypeLong(x)){
//implement my bussiness logig
}
我看过这篇文章How do you determine the type of data contained in a string?。如果现在没有更好的东西,我将继续使用regEx解决方案。
答案 0 :(得分:5)
为什么不尝试Long.valueOf(String)
首先将其解析为Long
,并且未能将其解析为Double
Double.valueOf(String)
?
如果无法解析字符串,则抛出NumberFormatException
。
public static void main(String[] args) throws Exception {
final String s1 = "1234567890";
System.out.println(isParsableAsLong(s1)); // true
System.out.println(isParsableAsDouble(s1)); // true
final String s2 = "1234.56789";
System.out.println(isParsableAsLong(s2)); // false
System.out.println(isParsableAsDouble(s2)); // true
}
private static boolean isParsableAsLong(final String s) {
try {
Long.valueOf(s);
return true;
} catch (NumberFormatException numberFormatException) {
return false;
}
}
private static boolean isParsableAsDouble(final String s) {
try {
Double.valueOf(s);
return true;
} catch (NumberFormatException numberFormatException) {
return false;
}
}
答案 1 :(得分:2)
如果.
可以用来区分:
String number = "12345";
if(number.indexOf(".")>=0){
//decimal
Double doubleValue = Double.valueOf(number);
}else{
Long longValue = Long.valueOf(number);
}
使用异常处理:
String number = "12345";
//You may define two variables as Double & Long (as used in previous example)
Number formattedNumber = null;
try{
if(number.indexOf(".")>=0){
//decimal
formattedNumber = Double.valueOf(number);
}else{
formattedNumber = Long.valueOf(number);
}
}catch(NumberFormatException nfe){
System.out.println("Not a double or Long");
}
答案 2 :(得分:0)
试试这个
Long l=Long.parseLong(x);
如果它无法解析,那么它将通过catch块中的异常尝试
Double=Double.parseDouble(x)
即便如此,如果发生异常,也无法解析