2012-07-27 279 views
0

我得到在Talend ETL工具NumberFormatException異常以下語句:獲得NumberFormatException異常在Talend

Integer.parseInt("+2"); 

錯誤的詳細信息:

Exception in component tJavaRow_3 
java.lang.NumberFormatException: For input string: "+2" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) 
at java.lang.Integer.parseInt(Integer.java:449) 
at java.lang.Integer.parseInt(Integer.java:499) 

這是真的,沒有任何問題,運行一個簡單的代碼在我的測試Java程序中。

public class Main { 
    public static void main(String[] args) { 
     String s = "+000000100"; 
     System.out.println(String.valueOf(new Integer(s))); 
    } 
} 

其實從我的位置文件中獲取該值和值可以是像0002或-0002(用符號爲前綴的一些有效數字)。有一件事是確定輸入中不會有任何小數。

在此先感謝。

回答

1

在您的上下文+2一定意味着正數2。將字符串傳遞給執行解析的函數時請注意,因爲它解析int,因此某些表達式(如3.53,5(小數))不會像預期的那樣產生。在這些情況下,應該使用Double.parseDouble或Float.parseFloat,而不是如果您能控制該代碼。另一方面,像-2這樣的負數將被解析爲沒有任何問題。

編輯:如果您使用位置文件,只需使用正則表達式或獲取子字符串從字符串的開頭刪除+。您也可以使用startsWith("+")來檢查字符串是否以+開頭。

2

+2不是一個有效的intefer。它應該只是2

+0

其實我是從一個位置文件得到這個值,這個值可以是類似於+0002或-0002(一些有符號前綴的有效數字)。而這段代碼在我的java測試程序中起作用。 'public class main { \t public static void main(String [] args)throws IOException {0} {0128} \t \t System.out.println(new Integer(s)); \t \t System.out.println(String.valueOf(new Integer(s))); \t \t System.out.println(s); \t} }' – Leejoy 2012-07-27 20:06:26

+0

你確定約+0002嗎?我只是試了一下。 NumberFormatException失敗。你能發佈你的測試代碼嗎? – kosa 2012-07-27 20:09:07

1

單從數量開始ZAP公司的+

num = num.replaceAll("\\+", ""); 
// parse, etc. 
+0

非常感謝您的回答,它的工作:) – Leejoy 2012-07-27 20:26:51

+0

偉大的,隨時'贊成'我的迴應:) – Reimeus 2012-07-27 20:28:27