Integer.parseInt() выдает NumberFormatException с файлами UTF-8

Мне нужно разобрать целые числа из содержимого файла.

Для тестирования моих алгоритмов, когда я даю содержимое файла из объявленной строки

String test = "15 kuruş";

Integer.parseInt отлично работает. Но когда я читаю с помощью класса Scanner из файла UTF-8, он не работает и дает исключение

java.lang.NumberFormatException: для входной строки: «15»

Примечание. Я разделил строку на «15» и «kuruş», поэтому метод parseInt принимает в качестве аргумента только «15».

Образец кода:

    satir = satir.trim();//15 kuruş
    StringTokenizer tokenizer = new StringTokenizer(satir," ");
    System.out.println(tokenizer.countTokens());//2
    String s = tokenizer.nextToken();
    int deger = Integer.parseInt(s);//where the exception was throwed

person Yunus Eren Güzel    schedule 07.12.2012    source источник
comment
Пожалуйста, покажите короткую, но полную программу, демонстрирующую проблему. Кроме того, проверьте, являются ли «1» и «5» обычными символами ASCII или их широким вариантом.   -  person Jon Skeet    schedule 07.12.2012
comment
если вы разделите пробелом, спецификация может быть до 15   -  person jlordo    schedule 07.12.2012
comment
Хорошо, я отредактировал. Я думаю, это не обычные символы ASCII. Как я указываю в вопросе, когда я даю тестовую строку, она работает нормально, но когда я читаю ту же строку из файла, она выдает исключение.   -  person Yunus Eren Güzel    schedule 07.12.2012
comment
Откройте файл в шестнадцатеричном редакторе, чтобы убедиться, что   -  person jlordo    schedule 07.12.2012
comment
@jlordo System.out.print(s) дает 15.   -  person Yunus Eren Güzel    schedule 07.12.2012
comment
@jlordo, когда я удаляю спецификацию, все работает нормально :) спасибо!   -  person Yunus Eren Güzel    schedule 07.12.2012
comment
@jlordo, можешь ли ты поставить это как ответ, чтобы я мог его принять   -  person Yunus Eren Güzel    schedule 07.12.2012
comment
@ljordo, ребята, что вы имеете в виду под спецификацией здесь?   -  person Nikolay Kuznetsov    schedule 07.12.2012
comment
@NikolayKuznetsov BOM = Метка порядка байтов Может присутствовать в файлах с кодировкой Unicode, чтобы указать, какая кодировка использовалась. Иногда приводит к проблемам и поэтому часто опускается.   -  person Fildor    schedule 07.12.2012


Ответы (1)


Ваш файл UTF-8, вероятно, начинается с BOM, вы должны прочитать файл с правильной кодировкой или избавиться от него вручную.

Поэтому, когда вашему 15 больше не предшествует спецификация, Integer.parseInt() будет работать.

person jlordo    schedule 07.12.2012