【问题标题】:sort doubles stored as strings ?排序存储为字符串的双打?
【发布时间】:2011-11-09 00:46:13
【问题描述】:

您好,有什么方法可以将字符串解析为数字吗?有没有办法在不破坏程序的情况下检查字符串是否为数字?我正在考虑使用 try and catch 这是一个好主意吗?

【问题讨论】:

  • 如何在不使程序崩溃的情况下做到这一点?
  • @Ingo,您以最干净的方式回答了问题。

标签: java string sorting


【解决方案1】:

如果不尝试解析字符串,就无法检查字符串是否可解析(因为任何检查都必须开始尝试将字符串解释为数字才能做到这一点......)。对于中途检查,我想您可以使用正则表达式来检查字符串是否只有数字和句点。不过,您还必须使用 try...catch 块。

关于如何将字符串解析成双精度,试试这个:

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

【讨论】:

【解决方案2】:

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

【讨论】:

【解决方案3】:

我假设您想使用其中一种分类的内置排序方法进行排序。在这种情况下,您需要创建一个自定义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());

【讨论】:

    【解决方案4】:

    看看 parseDouble

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

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

    【讨论】:

      【解决方案5】:

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

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

      希望对你有所帮助。

      问候, 薰衣草

      【讨论】:

      • 这不包括像"1.9E42"这样的双字符串
      猜你喜欢
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      相关资源
      最近更新 更多