如何控制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);
}
}
这只是示例代码,缺少很多功能:
- 仅限于有效的
s的子集(例如,double
将不被接受;或.1
)李>1.4e-3
- 不处理溢流/底流李>
- 其他的
Double.parseDouble()
。至于第二种,NumberFormat
可能会有所帮助。另外,你接受使用科学符号的数字吗?每种例外类型都有相当严格的限制。在catch中,您可以使用一些特殊代码手动检查变量代码>?在执行parseDouble
之前,始终可以使用正则表达式检查是否存在任何字母。这就是fge使用NUMPATTERN.private静态最终模式NUMPATTERN=“\\d+([,])\\d+”;似乎不起作用,是针对Java1.7的吗?我在eclipse中得到一个错误,说“将NUMPATTERN的类型更改为stringrofl”