2

我有一个迭代的 ResultSet,我创建了一个类似视图(html)的报告。问题是某些列返回 Long 值(作为 SQL 中的数学函数的结果)。

有没有一种简单的方法可以通过 DataType 识别这些值?

可以说我想做这样的事情

String x = rs.getString(1);
if(MyUtilClass.isOfTypeLong(x)){
  //implement my bussiness logig
}

我看过这篇文章如何确定字符串中包含的数据类型?. 如果现在没有更好的方法,我将继续使用 regEx 解决方案。

4

3 回答 3

5

为什么不尝试Long.valueOf(String)先将其解析为 a Long,然后将其解析为Doublewith 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;
    }
}
于 2012-11-12T14:18:29.390 回答
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");
    }
于 2012-11-12T14:22:32.413 回答
1

尝试这个

Long l=Long.parseLong(x);

如果它无法解析,那么它将通过 catch 块中的异常尝试

Double=Double.parseDouble(x)

即使发生异常也无法解析

于 2012-11-12T14:27:01.700 回答