似乎parseDouble可以接受带有尾随空格的字符串,但是parseInt和parseLong会抛出异常.
例如,对于这个测试用例
@Test
public void testNumberParsing() {
try {
Double.parseDouble("123.0 ");
System.out.println("works");
}catch (NumberFormatException e) {
System.out.println("does not work");
}
try {
Integer.parseInt("123 ");
System.out.println("works");
}catch (NumberFormatException e) {
System.out.println("does not work");
}
try {
Long.parseLong("123 ");
System.out.println("works");
}catch (NumberFormatException e) {
System.out.println("does not work");
}
}
Run Code Online (Sandbox Code Playgroud)
结果是
works
does not work
does not work
Run Code Online (Sandbox Code Playgroud)
为什么行为不同?这是故意的吗?
实际上记录了这种行为(虽然这是一个非常糟糕的设计......)!
返回一个初始化为由指定String表示的值的新double,由double类的valueOf方法执行.
s中的前导和尾随空格字符将被忽略.删除空格,就像使用String.trim()方法一样; 也就是说,删除了ASCII空格和控制字符.
字符串中的字符必须都是十进制数字,除了第一个字符可以是ASCII减号' - '('\ u002D')表示负值或ASCII加号'+'('\ u002B')表示正值.
归档时间: |
|
查看次数: |
442 次 |
最近记录: |