繁体   English   中英

sort double存储为字符串?

[英]sort doubles stored as strings ?

嗨有没有办法将字符串解析为数字? 有没有办法在不破坏程序的情况下检查字符串是否为数字? 我正在考虑尝试并抓住这会是一个好主意吗?

如果没有尝试解析字符串,就无法检查字符串是否可解析(因为任何检查都必须开始尝试将字符串解释为数字来执行该操作...)。 对于中途检查,我猜你可以使用正则表达式检查字符串是否只有数字和句点。 不过,你还必须使用try ... catch块。

至于如何将字符串解析为double,请尝试以下方法:

double dd;
try {
    dd = Double.parseDouble(string);
}
catch (NumberFormatException e) {
    System.out.println("couldnt not parse the string!");
}

是。 如果您的字符串无法解析为Double,则Double.valueOf(String s)将抛出NumberFormatException ,否则返回解析的Double。

我假设您要使用各种内置排序方法之一进行排序。 在这种情况下,您需要创建一个自定义Comparator<T> ,实现compare()equals()尝试将字符串解析为Double ,并在捕获异常时实现一些理智的默认行为。 确保在方法中捕获异常 - 如果让异常进入Java API代码,则应该遇到问题。

作为一个让你前进的简单例子:

class DoubleStringComparator implements Comparator<String> {

    public int compare(String o1, String o2) {
        try {
            double d1 = Double.parse(o1);
            double d2 = Double.parse(d2);
            if d1 > d2 {
                return 1;
            } else if d1 < d2 {
                return -1;
            else {
                return 0;
            }
        } catch (NumberFormatException e) {
            // whatever ordering you want to impose when one string is not a double
        }
    }

    // some definition of equals() - whatever makes sense for your application

}

然后,当你想要进行排序时:

Collections.sort(someListOfString, new DoubleStringComparator());

看看parseDouble

http://download.oracle.com/javase/6/docs/api/java/lang/Double.html#parseDouble%28java.lang.String%29

是的,您可以捕获NumberFormatException以确定该数字何时无效。

您可以使用正则表达式来查找字符串是否为double

if(num1.matches(("((-|\\+)?[0-9]+(\\.[0-9]+)?)+"))){
    isDoubleVal =true;                  
}else{
    isDoubleVal = false;
}

希望它能帮到你。

此致,Lav

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM