gpt4 book ai didi

java - 在确保字符串是有效的 double 值时,如何解释 ","和 "."?

转载 作者:太空宇宙 更新时间:2023-11-04 07:03:51 25 4
gpt4 key购买 nike

我试图确保给定的字符串是有效的 double 值。此类问题的大多数答案都建议使用 Double.parseDouble(inputString)。然而,这并不像我希望的那么强大。例如,如果我输入一个字符串,例如 "1one" Double.parseDouble("1one") 将输出“1”,而不是返回无效 double 的异常。

我尝试通过迭代字符串并确保每个数字都是数字来解决这个问题:

    for (int i = 0; i < number.length(); i++) {
previousChar = number.charAt(i);

if (!Character.isDigit(number.charAt(i))
&& number.charAt(i) != '.'
&& number.charAt(i) != ',') {
return null;
}
}

但是对于诸如“20..02”或“20,,02”之类的情况,这只会返回 20。我想知道解释此类情况的最佳方法是什么。

最佳答案

好问题。根据用户的不同,您可能需要注意区域设置之间的差异。有些地方使用 , 作为千位分隔符,其他地方则使用小数点。您可以使用以下方法找到特定于区域设置的值:

DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance();
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
char decimalSeparator = symbols.getDecimalSeparator();

我建议根据您的具体要求编写正则表达式,而不是手动进行匹配。如果您希望它匹配 . 而不是“任何字符”,请记住转义 .

或者,您也可以使用 parseDouble ,毕竟它似乎会引发 "1one" 异常:

System.out.println(Double.parseDouble("1one"));

对我来说,它产生:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1one"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)
at java.lang.Double.parseDouble(Double.java:540)

关于java - 在确保字符串是有效的 double 值时,如何解释 ","和 "."?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21705732/

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