HashMap<String, String> config = Feeds.config;
String num = config.get("NumOfFeeds");
System.out.println(num);
feedsAmount = ((Integer)num).intValue();
System.out.println(feedsAmount);
我还尝试了Integer.parseInt(num)
和Integer.decode(num)
以及Integer.valueof(bu)
结果如下:40
Exception in thread "main" java.lang.NumberFormatException: For input string:"40"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:458)
at java.lang.Integer.parseInt(Integer.java:499)
at fetch_RSS.<init>(fetch_RSS.java:40)
at testing.main(testing.java:27)
问题是由我正在读取的txt文件中的不同编码和Elipse中的编码引起的,默认情况下是macRoman。
答案 0 :(得分:1)
正确的工作方式是:
String num = config.get("NumOfFeeds");
int feeds = Integer.parseInt(num);
这只有在您确定String表示有效方式的数字时才会这样。
-30 // correct
0 // correct
2000 // correct
"40" // invalid
40 // valid
2.000 // invalid
2.000.000 // invalid
20,0 // invalid
2,000,000 // invalid
答案 1 :(得分:1)
Integer.java:458
引发了您的异常。
查看Integer
的源代码我看到你的字符串“40”的某些字符为Character.digit(s.charAt(i++), radix)
返回了一个负值(最可能为-1),其中i
正在迭代字符串的字符和基数是10.
这不应该正常发生。但是当字符串是“4o”而不是像“Løkling”在评论中疯狂猜测的“40”时,就会发生这种情况。
你应该在这里调试看看到底发生了什么。
答案 2 :(得分:0)
当然,您无法从String
投射到Integer
。 String
不是Integer
,Integer
不是String
。
您必须使用int i = Integer.parseInt(..)
。如果字符串是格式正确的整数,则它可以工作。
答案 3 :(得分:0)
对于在Java中成功的强制转换,正在强制转换的引用必须指向一个对象,该对象实际上是要强制转换为的类型的实例。对String
的引用无法转换为Integer
,因为对象可能不是两者都可以。
(这有点不像C中的强制转换,基本上只是说,根据不同的数据类型重新解释这里存储的数据。在C中使用强制转换作为转换表示数字的字符串的方法仍然是不正确的到数值。)
Integer.parseInt
就是你在这里寻找的。你有什么问题吗?
答案 4 :(得分:0)
记住:在java中,我们只能在对象之间进行强制转换,如果它们是同一类型的显式!在其他语言中,比如python,我们可以在这里执行你所要求的转换,因为这些语言允许“鸭子打字”。
必须使用Integer.parseInt(“1234”)从String创建一个Integer对象。
或者,您可以为数据创建一个Object包装器:
class MyObject
{
Object input;
public MyObject(Object input)
{
this.input=input;
}
public Integer getInt()
{
return Integer.parseInt(input.toString());
}
public String getString()
{
return input.toString();
}
}
然而,这对你的简单问题来说太过分了:)