解析存储为字符串的浮点数应抛出exception
我有一个存储数字的字符串。 现在我想解析该字符串并获得浮点数。
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:booolean和double解析的情况相同。
PPS:为什么java中存在不一致? 我已经检查了源代码
正如您在相关源代码中看到的那样,该值将被修剪:
static FloatingDecimal.ASCIIToBinaryConverter readJavaFormatString(String arg) throws NumberFormatException { boolean arg0 = false; boolean arg1 = false; try { arg = arg.trim(); ....
因此在转换为floatValue之前将删除空白。 有关更多信息,请参阅Float.class
调用的FloatingDecimal源代码。
Integer.parseInt()
不会修剪字符串值:
public static int parseInt(String arg, int arg0) throws NumberFormatException { if (arg == null) { throw new NumberFormatException("null"); } else if (arg0 < 2) { throw new NumberFormatException("radix " + arg0 + " less than Character.MIN_RADIX"); } else if (arg0 > 36) { throw new NumberFormatException("radix " + arg0 + " greater than Character.MAX_RADIX"); } else { int arg1 = 0; boolean arg2 = false; int arg3 = 0; int arg4 = arg.length(); int arg5 = -2147483647; if (arg4 > 0) { char arg8 = arg.charAt(0); if (arg8 < 48) { if (arg8 == 45) { arg2 = true; arg5 = MIN_VALUE; } else if (arg8 != 43) { throw NumberFormatException.forInputString(arg); } if (arg4 == 1) { throw NumberFormatException.forInputString(arg); } ++arg3; } int arg7; for (int arg6 = arg5 / arg0; arg3 < arg4; arg1 -= arg7) { arg7 = Character.digit(arg.charAt(arg3++), arg0); if (arg7 < 0) { throw NumberFormatException.forInputString(arg); } if (arg1 < arg6) { throw NumberFormatException.forInputString(arg); } arg1 *= arg0; if (arg1 < arg5 + arg7) { throw NumberFormatException.forInputString(arg); } } return arg2 ? arg1 : -arg1; } else { throw NumberFormatException.forInputString(arg); } } }
这就是为什么你在那里得到一个例外
- java.lang.IllegalStateException:BindingResult和bean名称’category’的普通目标对象都不能作为请求属性使用
- Spring v3没有为元素’mvc:resources’找到声明
- Java FileInputStream ObjectInputStream到达文件结尾EOF
- 如何在JAVA中将两个或多个tiff图像文件合并到一个多页tiff图像中
- 如何在我的java程序中集成stanford解析器软件?
- Java中的OutputStream是阻塞的吗? (sockets)
- 如何从目录中获取特定数量的文件?
- 在Java中编码URL的最佳方法
- Vaadin 8.5.1-行更新后刷新网格