一尘不染

确定字符串是否为数字并用Java转换?

java

我知道这个问题的变体以前经常被问过,但这 并不是 这些问题的 精确 重复。

我想检查a String是否为数字,如果是,我想将其存储为double。有几种方法可以做到这一点,但是所有这些方法似乎都不适合我的目的。

一种解决方案是使用Double.parseDouble(s)或类似方法new BigDecimal(s)。但是,如果存在逗号,这些解决方案将不起作用(因此,“
1,234”将导致异常)。在使用这些技术之前,我当然可以删除所有逗号,但是这似乎在其他地区带来了很多问题。

我看了Apache Commons NumberUtils.isNumber(s),但是却遇到了同样的逗号问题。

我考虑过NumberFormatDecimalFormat,但这些似乎太宽容了。例如,“ 1A”被格式化为“
1”,而不是表示它不是数字。此外,类似“ 127.0.0.1”的内容将被计为数字127,而不是表示它不是数字。

我觉得我的要求不是那么陌生,以至于我是第一个这样做的人,但是没有一个解决方案能够完全满足我的需求。我想我什至不知道我 到底
需要什么(否则我可以编写自己的解析器),但是我知道上述解决方案由于所指出的原因而无法使用。是否存在任何解决方案,或者我需要准确确定我需要什么并为此编写自己的代码?


阅读 166

收藏
2020-12-03

共1个答案

一尘不染

听起来很怪异,但我会尝试遵循并使用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");

对于输入,如1A127.0.0.11,2346.02e-23我得到下面的输出:

Not a number
Not a number
1234
6.02E-23

Scanner.useLocale 可用于更改为所需的语言环境。

2020-12-03