gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:26:12 25 4
gpt4 key购买 nike

所以我有这些行:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com