java - parseDouble 与 nextDouble

标签 java string parsing double

我有以下代码:

Scanner in = new Scanner(System.in);
while (in.hasNextDouble()) {
    System.out.println(Double.parseDouble(in.nextLine()));
}

输入:

1.1
2.2
3.3

程序在读取此输入后停止,而正如我假设的那样,它仍然应该从输入中读取。 这是为什么?

最佳答案

问题可能是您的默认区域设置使用逗号作为分隔符。
Double.parseDouble() - 始终使用点作为分隔符。
in.nextDouble() - 使用您的区域设置指定的分隔符。
结果是,其中一种方法可以使用逗号作为分隔符,而另一种方法则使用点。

要解决这个问题,您应该统一从输入中读取/解析 double 的方法,并决定要使用哪个分隔符。
您可以设置分隔符的类型,例如使用:
1. 点分隔符:

Scanner in = new Scanner(System.in);
in.useLocale(Locale.ENGLISH);

或者:

Scanner in = new Scanner(System.in);
in.useDelimiter("\\.");

2. 逗号分隔符:

Scanner in = new Scanner(System.in);
in.useLocale(Locale.FRENCH);

Scanner in = new Scanner(System.in);
in.useDelimiter(",");

因此重构您的代码:

Scanner in = new Scanner(System.in);
in.useLocale(Locale.ENGLISH);
while (in.hasNextDouble()) {
    System.out.println(Double.parseDouble(in.nextLine()));
}


要清楚地看到问题,您可以使用以下代码:

Locale.setDefault(Locale.FRANCE);
Scanner in = new Scanner(System.in);
System.out.println(in.hasNextDouble());
Double.parseDouble(in.nextLine());

输入:1,1

hasNextDouble() 的结果为 true,而 Double.parseDouble(in.nextLine()) 抛出 NumberFormatException。

希望有帮助。

关于java - parseDouble 与 nextDouble,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40551038/

相关文章:

java - 项目 Reactor 中的 Parallel Flux 与 Flux

mysql - 所需问题的输出不正确

parsing - 为什么自顶向下解析器无法处理左递归?

python - Python 中 isnumeric 和 isdecimal 的区别

c# - 用 C# 编写 CSV 解析器

c++ - std::wistringstream 解析时可以忽略字符串中的空格吗?

java - 在 Fragment 中找不到符号变量 R

java - FTP 客户端从 TLS 1.0 升级到 TLS 1.2

java - 评估 XPath 和 XmlResourceParser 会导致异常

string - 最长重复子串