2013-05-06 172 views
2

下面是如果金额不是整数或浮点数时抛出异常的方法 但是当我强制传递字符串时它不起作用,因为在字符串的情况下它应该抛出异常并使有效的为假,但它仍然返回有效,真正的请指教什么是错的,我表达以下验证所需字段的表达式

private boolean isAmount(String amount) { 
    boolean isValid = true; 
    try { 
     if (amount.matches("[-+]?[0-9]*\\.?[0-9]+")) { 
      return isValid;  
     } 
    } 
    catch (NumberFormatException e) { 
     isValid = false; 
    } 
    return isValid; 
} 

回答

3

你是不是想给它的任何地方进行转换,所以没有抛出异常。只是这样做......

private boolean isAmount(String amount) { 
    return amount.matches("[-+]?[0-9]*\\.?[0-9]+")); 
} 
3

你的正则表达式工作得很好,它是围绕它运行不正常的逻辑:

这将工作:

private boolean isAmount(String amount) { 
    if(amount == null) return false; 
    if (amount.matches("[-+]?[0-9]*\\.?[0-9]+")) return true; 
    return false; 
} 

或者是这样的:

private boolean isAmount(String amount) { 
    boolean ret = true; 
    try { 
    double val = Double.parseDouble(amount); 
    } catch (NumberFormatException e) { 
    ret = false; 
    } 
    return ret; 
} 
+1

第一溶液可以减少到'返回摩unt!= null && amount.matches(“[ - +]?[0-9] * \\。?[0-9] +”));'。 – sp00m 2013-05-06 09:05:22

+0

你是对的,但是,我更喜欢编码的更详细的方法。我工作的地方之一要求它,其他人更喜欢它。令人惊讶的是,开发人员的数量无法解读您所写的内容,但可以用我写的内容解码。仍然+1您的答案。 – 2013-05-06 12:31:33

1
// Try this one to check the output - running fine.... as per your needs 

    private boolean isAmount(String amount) { 
    boolean isValid = true; 
    try { 
      if (amount.matches("[-+]?[0-9]*\\.?[0-9]+")) { 
      isValid= true; 
} 
else 
{ 
isValid = false; 
} 

}catch (NumberFormatException e) { 
    isValid = false; 
    } 
    return isValid; 
    }