如何确定字符串是Double还是Long类型

时间:2012-11-12 14:15:41

标签: java regex types

我有一个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解决方案。

3 个答案:

答案 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)

即便如此,如果发生异常,也无法解析