如何在JAVA中控制CATCH错误

时间:2014-02-15 13:30:34

标签: java exception-handling

所以我有这些界限:

try {
   extra = Double.parseDouble(igu.txfExtra.getText());
} catch (NumberFormatException e1) {
   System.out.print("Error");               
}

它从名为txfExtra的JTextField中收集一个double。

如果错误是通过在标签中引入字母而在System.out.print中怎么说? 我的意思是,如果错误是由于“额外”收集字符串,则表明该错误是由字符串引起的。

另外一个额外的问题,我如何能够“额外”以两种方式获取价值“。”和“,”因为本地化它需要例如“10.923”或“10,923”我希望它在解析double时接受两种类型的格式。

1 个答案:

答案 0 :(得分:1)

为了满足这两个要求,您需要的不是Double.parseDouble()。首先,它将使用当前的语言环境;另外,它的错误信息不会像你想要的那样详细。

解决方案是通过正则表达式来解析输入字符串,并且只有在正则表达式通过时才使用NumberFormat进行解析:

private static final Pattern NUMPATTERN = Pattern.compile("\\d+([.,])\\d+");

// ...

// Supposes a custom MyException class
public double doParseDouble(final String input)
    throws MyException
{
    final Matcher m = NUMPATTERN.matcher(input);
    if (!m.matches())
        throw new MyException("Non number characters in input");

    final String separator = m.group(1);
    final Locale locale = ".".equals(separator)
        ? Locale.US : Locale.FRENCH;

    final NumberFormat fmt = NumberFormat.getInstance(locale);

    try {
        return fmt.parse(input).doubleValue();
    } catch (NumberFormatException e) {
        throw new MyException(e);
    }
}

这只是示例代码,缺少很多功能:

  • 仅限于有效double的子集(例如.1不会被接受;或1.4e-3);
  • 不处理溢出/下溢;
  • 他人。