2014-06-15 116 views
-1

我從定製的日誌中獲取此異常:爲什麼我的代碼拋出NumberFormatException?

java.lang.NumberFormatException: Invalid int: "12px" 
    at java.lang.Integer.invalidInt(Integer.java:137) 
    at java.lang.Integer.parse(Integer.java:374) 
    at java.lang.Integer.parseInt(Integer.java:365) 
    at java.lang.Integer.parseInt(Integer.java:331) 

後來我查了相關的代碼,但我不明白爲什麼這發生異常:

String fontSize = styles.getStyle("font-size"); 
if (fontSize.endsWith("px")) { 
    fontSize = fontSize.substring(0, fontSize.length() -2); 
} 
setWeight(Integer.parseInt(fontSize)); 

謝謝!

這是我的解決辦法:

try { 
    setWeight(Integer.parseInt(fontSize)); 
} catch (NumberFormatException e) { 
    setWeight(12); 
} 
+4

只要運行調試器,看看它似乎會發生什麼 –

+0

你的子方法不能正常工作,作爲「一把手」有「PX」結尾。 –

+0

你的條件是錯誤的,所以你的字符串沒有得到重新初始化。您試圖將包含字母(px)的字符串解析爲整數。查看代碼的最後一行。 –

回答

1

這個怎麼樣:

fontSize = fontSize.replaceAll("[^\\d]", ""); 

它將替換所有非數字字符「」(什麼)和左將所有的多數民衆贊成12。 你甚至不必測試你的字符串是否以'px'結尾,因爲沒有任何非數字字符的字符串將不會被觸及。
總之它會給你:

String fontSize = styles.getStyle("font-size"); 
fontSize = fontSize.replaceAll("[^\\d]", ""); 
setWeight(Integer.parseInt(fontSize)); 
+0

我想知道爲什麼_fontSize.endsWith(「px」)_不會刪除字符串** px **。我檢查源文件_Integer.java_,「12px」應該是原始字符串。 – xiahou

+0

@xiahou,對不起,我沒有答案 - 你的代碼是正確的,正如我所說的,當我嘗試它時,一切都沒有例外。 – GameDroids

相關問題