所以我有这些界限:
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时接受两种类型的格式。
答案 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
);