在使用Spring和Java解析String to Doubles时,我遇到了一些问题。这与Spring并不完全相关,但它可能会让你陷入困境。
我有一个CustomNumberEditor,用于轻松解析Strings to Doubles。 java.text.DecimalFormat用作解析double到string的十进制格式。但是,当你使用numberFormat.parse(stringDouble)时,如果字符串以数字开头,并且后跟字母,则返回的值是数字。即12a被解析为12.对我而言,这显然是错误的,我想轻易解决这个问题。
我想这应该在其他类型的numberFormat或属性或其他东西中实现,但我找不到它。有什么想法吗?
答案 0 :(得分:1)
您应该使用version of the parse method taking a ParsePosition
as argument。解析完成后,位置索引将更新为使用最后一个字符后的索引。因此,您可以检查此索引是否等于字符串的长度。如果不是,则表示整个字符串尚未用于生成返回的数字。
答案 1 :(得分:0)
parse(...)
方法不会消耗所有文字,因此会允许12a
等“数字”(这也可能是像12USD
这样的货币。)
但是,您的CustomNumberEditor
可能只是将一个仅数字模式应用于String#matches(...)
,以便在解析字符串之前检查字符串只包含一个数字 - 类似于^-?\d+\.?\d*$
(字符串必须只有包含数字,减号和分隔符)。但是,您应该注意,这是依赖于语言环境的,并不像十进制格式模式那样灵活。
答案 2 :(得分:0)
try{
double d = Double.parseDouble("12abc");
}
catch(NumberFormatException nfe){
System.out.println("The string is not formatted correctly");
//do something here if the string is bad
}
如上所述,请使用Double.parseDouble(String s)。如果字符串格式不正确,它将抛出异常。然后你只需将它包装在try-catch语句中,并在输入格式不正确的情况下执行你希望程序执行的任何操作。