Подтвердить что ты не робот

Java.lang.NumberFormatException для строки ввода "1"

Итак, у меня есть проблема, которая меня действительно беспокоит. У меня есть простой парсер, который я сделал в java. Вот фрагмент соответствующего кода:

while( (line = br.readLine())!=null)
{
    String splitted[] = line.split(SPLITTER);
    int docNum = Integer.parseInt(splitted[0].trim());
    //do something
}

Входной файл представляет собой CSV файл, первая запись которого является целым числом. Когда я начинаю синтаксический анализ, я получаю это исключение:

Exception in thread "main" java.lang.NumberFormatException: For input string: "1"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at dipl.parser.TableParser.parse(TableParser.java:50)
at dipl.parser.DocumentParser.main(DocumentParser.java:87)

Я проверил файл, он действительно имеет 1 в качестве своего первого значения (в этом поле нет других символов), но я все еще получаю сообщение. Я думаю, что это может быть из-за кодировки файлов: это UTF-8 с конечными концами Unix. И программа запускается на Ubuntu 14.04. Любые предложения, где искать проблему, приветствуются.

4b9b3361

Ответ 1

У вас есть BOM перед этим номером; если я скопирую то, что выглядит как "1" в вашем вопросе, и вставьте его в vim, я вижу, что у вас есть FE FF (например, BOM) перед ним. По этой ссылке:

Точные байты, содержащие спецификацию, будут независимо от того, какой символ Юникода U + FEFF преобразуется в этот формат преобразования.

Итак, чтобы проблема, используйте файл с соответствующим считывателем для преобразования (UTF-8, UTF-16 big-endian, UTF-16 little-endian и т.д.), в который закодирован файл. См. Также этот вопрос и его ответы для получения дополнительной информации о чтении файлов Unicode в Java.