如何控制JAVA中的捕获错误

如何控制JAVA中的捕获错误,java,exception-handling,Java,Exception Handling,所以我有以下几行: try { extra = Double.parseDouble(igu.txfExtra.getText()); } catch (NumberFormatException e1) { System.out.print("Error"); } 它从一个名为txfetra的JTextField收集一个double 例如,如果错误是通过在标签中引入字母造成的,我如何在System.out.print中说? 我的意思是,如果错误是由于

所以我有以下几行:

try {
   extra = Double.parseDouble(igu.txfExtra.getText());
} catch (NumberFormatException e1) {
   System.out.print("Error");               
}
它从一个名为txfetra的JTextField收集一个double

例如,如果错误是通过在标签中引入字母造成的,我如何在System.out.print中说? 我的意思是,如果错误是由于“额外”收集字符串造成的,则表明错误是由于字符串造成的


还有一个额外的问题,我如何使“extra”同时使用“.”和“.”来获取值,因为由于本地化,它要么使用例如“10.923”或“10923”,我希望它在解析double时接受这两种类型的格式

为了满足这两个要求,您需要的不是
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
    s的子集(例如,
    .1
    将不被接受;或
    1.4e-3
  • 不处理溢流/底流
  • 其他的

对于您的第一个需求,您需要的不是
Double.parseDouble()
。至于第二种,
NumberFormat
可能会有所帮助。另外,你接受使用科学符号的数字吗?每种例外类型都有相当严格的限制。在catch中,您可以使用一些特殊代码手动检查变量?在执行
parseDouble
之前,始终可以使用正则表达式检查是否存在任何字母。这就是fge使用NUMPATTERN.private静态最终模式NUMPATTERN=“\\d+([,])\\d+”;似乎不起作用,是针对Java1.7的吗?我在eclipse中得到一个错误,说“将NUMPATTERN的类型更改为stringrofl”