2012-07-27 106 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