0

对于以下语句,我在 talend ETL 工具中收到 NumberFormatException:

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 (一些以符号为前缀的有效数字)。有一件事是确定输入中不会有任何小数。

提前致谢。

4

3 回答 3

2

+2不是一个有效的干扰。应该只是2

于 2012-07-27T19:56:47.430 回答
1

只需+从数字的开头删除:

num = num.replaceAll("\\+", "");
// parse, etc.
于 2012-07-27T19:59:14.390 回答
1

在您的上下文中+2必须表示一个正数2。将字符串传递给进行解析的函数时要小心,因为因为它解析整数,所以某些表达式(例如3.5or 3,5(十进制))不会像预期的那样产生结果。如果您可以控制该代码,则应在这些情况下使用 Double.parseDouble 或 Float.parseFloat。另一方面,负数 like-2将被解析而没有任何问题。

编辑:如果您使用的是位置文件,只需通过使用正则表达式或获取子字符串从字符串的开头删除 +。您还可以使用startsWith("+")来检查字符串是否以 + 开头。

于 2012-07-27T20:08:09.227 回答