No “tryParseDouble” in Java?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How to check a String is a numeric type in java
号
我看到我可以使用
因为可能会抛出一个
在Delphi中,有EDOCX1(我认为是8),如果字符串不能解析为
Java中没有类似的东西吗?我的意思是:没有标准的方法来做到这一点?
这样做的标准方法是:
1 2 3 4 5 6 7 8 | double d; try { d = Double.parseDouble(input); } catch (NumberFormatException e) { // Use whatever default you like d = -1.0; } |
如果您愿意的话,这当然可以被包装成一种库方法。
总的来说,我不认为这不是语言的一部分——如果字符串的格式不正确,它不代表
问题是你有两个可能的结果。或者您有一个有效的double,或者您没有。如果您有一个返回值,您需要检查,您可能会忘记检查,或者您有一个if检查每个值。
1 2 3 4 5 6 7 8 9 10 | try { double d = Double.parseDouble(input); double d2 = Double.parseDouble(input2); double d3 = Double.parseDouble(input3); double d4 = Double.parseDouble(input4); // all number are good. } catch (NumberFormatException e) { e.printStackTrace(); //prints error } |
。
或
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | double d, d2, d3, d4; if (tryParseDouble(input)) { d = parseDouble(input); if (tryParseDouble(input2)) { d2 = parseDouble(input2); if (tryParseDouble(input3)) { d3 = parseDouble(input3); } else { if (tryParseDouble(input4)) { d4 = parseDouble(input4); } else { System.out.println("Cannot parse" + input4); } System.out.println("Cannot parse" + input3); } } else { System.out.println("Cannot parse" + input2); } } else { System.out.println("Cannot parse" + input); } |
你总是可以上一些工厂的课
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class DoubleFactory{ public static double tryParseDouble(final String number){ double result; try { result = Double.parseDouble(number); } catch (NumberFormatException e) { result = 0.0; } return result; } } |
。
但这有很大的问题。您的程序将继续其正常流,但您的一些模型类将被"破坏"。在其他操作之后,这个"默认"值将弹出,并破坏其他值,以及其他值。最糟糕的是,您不会看到导致这些坏结果的异常。至少你可以
1 2 3 4 5 | catch (NumberFormatException e) { //add exception logging here, something like logger.info(e.getMessage()); result = 0.0; } |
。
但结果是相同的-使用默认0.0(或-1.0或其他)值的操作会导致某些不可恢复的状态。
作为已经提供的解决方案的替代方案,您可以使用regex:
1 2 3 | Pattern doublePattern = Pattern.compile("^\d*$"); Matcher matchesDouble = doublePattern.matcher(myString); boolean isDouble = matchesDouble.matches(); |
号
或:
1 | boolean isDouble = Pattern.matches("^\d*$", myString); |