我正在从文件中读取值,其中使用 Integer.MAX_VALUE (作为文本文件中的文本)而不是看似随机的、奇怪的大数字来指示图搜索算法中的无限成本。 我必须将字符串“Integer.MAX_VALUE”转换为int,因此我尝试对其使用
Integer.parseInt()
方法。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 );}
如果您检查 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
,它不是整数值。