gpt4 book ai didi

java - 解析存储为字符串的 float 应该抛出异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:24:08 25 4
gpt4 key购买 nike

我有一个存储数字的字符串。现在我想解析那个字符串并得到 float 。

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 而解析 float 不会抛出异常?

PS: boolean 和双重解析也是如此。

PPS:为什么在 java 中存在不一致?我已经检查了源代码

最佳答案

正如您在相关源代码中看到的,该值将被修剪:

static FloatingDecimal.ASCIIToBinaryConverter readJavaFormatString(String arg) throws NumberFormatException {
boolean arg0 = false;
boolean arg1 = false;

try {
arg = arg.trim();
....

因此在转换为 floatValue 之前将删除空白。有关更多信息,请参阅 FloatingDecimal 的源代码由 Float.class 调用。

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 - 解析存储为字符串的 float 应该抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39139021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com