验证语言环境中的十进制数字
可能重复:
安全解析数字和区域设置
我怎样才能验证包含十进制数字字符串敏感的方式? NumberFormat.parse允许太多,而Double.parseDouble仅适用于英文语言环境。 这是我试过的:
public static void main(String[] args) throws ParseException {
Locale.setDefault(Locale.GERMAN);
NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.getDefault());
Number parsed = numberFormat.parse("4,5.6dfhf");
System.out.println("parsed = " + parsed); // prints 4.5 instead of throwing ParseException
double v = Double.parseDouble("3,3"); // throws NumberFormatException, although correct
}
关于这个问题
Number parsed = numberFormat.parse("4,5.6dfhf");
问题,你可能会使用NumberFormat.parse(String source,ParsePosition pos)并检查它停止解析的位置是否确实是该字符串的最后一个位置。
此外,在4.5.6问题上,你可以尝试通过setGroupingUsed(boolean newValue)来设置分组,因为我认为这是'。'产生的问题。 字符是区域设置上的分组字符。
它应该是类似的
NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.getDefault());
numberFormat.setGroupingUsed(false);
ParsePosition pos;
String nString = "4,5.6dfhf";
Number parsed = numberFormat.parse(nString, pos);
if (pos.getIndex() == nString.length()) // pos is set AFTER the last parsed position
System.out.println("parsed = " + parsed);
else
// Wrong
从上面的评论中,您可以使用:
String input = "3,3"; // or whatever you want
boolean isValid = input.matches("^d+([.,]d+)?$");
double value = Double.parseDouble(input.replaceAll(",", "."));
如果分隔符可以是除逗号之外的其他分隔符,请将其添加到方括号中:
double value = Double.parseDouble(input.replaceAll("[,]", "."));
链接地址: http://www.djcxy.com/p/11693.html
上一篇: Validating decimal numbers in a locale
下一篇: Using CDT's Abstract Syntax Tree API to generate/write C code?