为什么在字符串“Integer.MAX_VALUE”上使用 Integer.parseInt 会失败?

问题描述 投票:0回答:1

我正在从文件中读取值,其中使用 Integer.MAX_VALUE (作为文本文件中的文本)而不是看似随机的、奇怪的大数字来指示图搜索算法中的无限成本。 我必须将字符串“Integer.MAX_VALUE”转换为int,因此我尝试对其使用

Integer.parseInt()
方法。
在查看了 Java 的
Integer.parseInt()
实现之后,我注意到点字符('.')不是可接受的字符,这让我认为尝试转换 String 会抛出错误;我是对的,根据下面代码给出的错误。

是否有特定的设计选择原因不将“Integer.MAX_VALUE”转换为int值Integer.MAX_VALUE?它是“将输入作为代码运行”字符串解释漏洞吗?是不是疏忽了?

注意:“Integer.MIN_VALUE”也会出现此问题

// FAILS TO COMPILE
public class Main
{
    public static void main(String[] args) {
        String s = "Integer.MAX_VALUE";
        int i = Integer.parseInt(s);
    }
}
// Exception ...: For input String: "Integer.MAX_VALUE"
// at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
// at java.base/java.lang.Integer.parseInt(Integer.java:652)
// at java.base/java.lang.Integer.parseInt(Integer.java:770)


// SUCCESSFUL WORKAROUND (focusing on the non-boilerplate code)
// [code to read from file and place it in a String called distance_str]
if(distance_str == "Integer.MAX_VALUE"){    distance = Integer.MAX_VALUE;}
else{                                       distance = Integer.parseInt( distance_str );}
java parseint
1个回答
0
投票

如果您检查 Integer:parseInt 的文档。你可以在文档中清楚地找到它

字符串中的字符必须全部是十进制数字,除了第一个字符可以是表示负值的 ASCII 减号“-”(“\u002D”)或表示负值的 ASCII 加号“+”(“\u002B”) ) 表示正值

String s = "" + Integer.MAX_VALUE ;
int i = Integer.parseInt(s);

基本上就是您想要实现的目标。


在这种情况下,字符串

s
的值为
2147483647
,而在您的情况下

String s = "Integer.MAX_VALUE"

的值为

Integer.MAX_VALUE
,它不是整数值。

© www.soinside.com 2019 - 2024. All rights reserved.