Получение NumberFormatException в Talend

Я получаю NumberFormatException в инструменте talend ETL для следующего утверждения:

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 (некоторые действительные числа с префиксом со знаком). И одна вещь уверена, что на входе не будет десятичных дробей.

Заранее спасибо.

3 ответа

Решение

В вашем контексте +2 должно означать положительное число 2, Будьте осторожны при передаче строк в функцию, которая выполняет синтаксический анализ, потому что, поскольку она анализирует, вводит некоторые выражения, такие как 3.5 или же 3,5 (десятичные дроби) не будет результатом, как ожидалось. Вместо этого следует использовать Double.parseDouble или Float.parseFloat в этих случаях, если у вас есть контроль над этим кодом. С другой стороны, отрицательные числа, такие как -2 будет разобрано с любой нашей проблемой.

РЕДАКТИРОВАТЬ: Если вы используете позиционные файлы, просто удалите + из начала вашей строки либо с помощью регулярного выражения или получения подстроки. Вы также можете использовать startsWith("+") проверить, начинается ли строка с +.

+2 не является допустимым целым числом. Должно быть просто 2,

Просто убей + с начала номера:

num = num.replaceAll("\\+", "");
// parse, etc.
Другие вопросы по тегам