Mic*_*wan 24 java numbers bigdecimal string-parsing
我知道这个问题的变种频繁之前(见已被要求在这里和这里的实例),但是这不是一个确切的重复.
我想检查a String是否是数字,如果是,我想将其存储为double.有几种方法可以做到这一点,但所有这些方法似乎都不适合我的目的.
一种解决方案是使用Double.parseDouble(s)或类似new BigDecimal(s).但是,如果存在逗号,则这些解决方案不起作用(因此"1,234"会导致异常).我当然可以使用这些技术之前去掉所有的逗号,但这似乎不会造成在其他语言环境的问题负载.
我查看了Apache Commons NumberUtils.isNumber(s),但是它遇到了同样的逗号问题.
我认为NumberFormat还是DecimalFormat,但这些似乎过于宽松.例如,"1A"被格式化为"1"而不是表示它不是数字.此外,像"127.0.0.1"这样的东西将被计为数字127而不是表示它不是数字.
我觉得我的要求不是那么奇特,我是第一个这样做,但没有一个解决方案完全符合我的要求.我想即使我不确切知道我需要什么(否则我可以编写自己的解析器),但我知道上述解决方案因指示的原因不起作用.是否存在任何解决方案,或者我是否需要准确弄清楚我需要什么并为其编写自己的代码?
Giu*_*lli 15
听起来很奇怪,但我会尝试按照这个答案使用java.util.Scanner.
Scanner scanner = new Scanner(input);
if (scanner.hasNextInt())
System.out.println(scanner.nextInt());
else if (scanner.hasNextDouble())
System.out.println(scanner.nextDouble());
else
System.out.println("Not a number");
Run Code Online (Sandbox Code Playgroud)
对于输入,如1A,127.0.0.1,1,234,6.02e-23我得到下面的输出:
Not a number
Not a number
1234
6.02E-23
Run Code Online (Sandbox Code Playgroud)
Scanner.useLocale 可用于更改为所需的区域设置.
| 归档时间: |
|
| 查看次数: |
13992 次 |
| 最近记录: |