java - 如何控制JAVA中的CATCH错误

标签 java exception

所以我有这些行:

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 时接受两种类型的格式。

最佳答案

为了满足这两个要求,您需要除 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);
  • 不处理上溢/下溢;
  • 其他。

关于java - 如何控制JAVA中的CATCH错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21798217/

相关文章:

php - PHP 7.0扩展Exception类参数错误错误

c++ - 标记为 noexcept 的函数内部可以有异常吗?

c++ - 从 catch block 中的函数重新抛出

exception - curl 异常 : 28: connect() timed out?

java - close()方法的使用(Java初学者)

java - Java 深拷贝和浅拷贝

java - findViewById 用于在包含的合并根元素内查看

ruby - 为什么 ruby 不引发异常?

java - JAXB 编码 NumberFormatException 不是数字 : 2. 44​​4 at com.sun.xml.bind.DatatypeConverterImpl._parseInt(DatatypeConverterImpl.java:132)

java - 无法将类型 [JmsManagedConnectionFactoryImpl] 的值转换为所需类型 [javax.jms.ConnectionFactory]