【发布时间】:2023-03-08 21:45:01
【问题描述】:
我有一个存储数字的字符串。现在我想解析那个字符串并得到浮点数。
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
try {
System.out.println(Integer.parseInt(" 2 "));
} catch(NumberFormatException e) {
System.out.println("Exception caught");
}
System.out.println(Float.parseFloat(" 2.4 "));
}
}
现在在上面的代码中如果你运行它就会成功。我的问题是为什么在整数的情况下尾随空格会抛出 NumberFormatException 而解析浮点数不会抛出一个?
PS:布尔和双重解析也是如此。
PPS:为什么 java 有不一致的地方?我已经检查了源代码
【问题讨论】:
-
为什么不看看源码学习一下呢?或者看看@jens 的回答 ;-)
-
@ScaryWombat 没有必要获取Java的源代码并阅读它来了解方法的作用;该信息应该在方法的 JavaDoc 中。在这种情况下,
Float.parseFloat(String)的 JavaDoc 没有这么说,但它说 ...由 Float 类的 valueOf 方法执行...,Float.valueOf(String)的 JavaDoc 确实说s 中的前导和尾随空白字符被忽略. -
@SantiBailors 谢谢 - 很棒的评论
-
调用这个java 中的不一致 有点牵强。它们是两种不同的方法。和你一样,我也没有看到造成这种差异的原因,但是应该向设计师询问这种原因,并且可能有充分的理由或没有。这仍然是解析两种不同类型值的两种不同方法,假设它们以相同方式处理参数是不明智的。
-
@daotan 和 Shaishav 作者没有忘记在 parseInt 中进行修剪,也没有忘记添加 JavaDoc 注释。他们确实提到了 Float 的修剪(见上文),因为它修剪,并且没有提到 Integer 的修剪,因为它不修剪。他们没有提到造成这种差异的原因,但设计决策的原因并不是一个方法的 JavaDoc 应该提到的。