JavaRush/Java блог/Архив info.javarush/Проблема с методом Integer.parseInt(String s)
nanoezhik
41 уровень

Проблема с методом Integer.parseInt(String s)

Статья из группы Архив info.javarush
участников
Уважаемые форумчане! Может кто из вас сталкивался с проблемой использования метода: Integer.parseInt(String s). Проблема с методом Integer.parseInt(String s) - 1Проблема в следующем: метод физически на моем компьютере не хочет преобразовывать некоторые строки в числа. Имеем строку "1568", метод выдает ошибку:
Exception in thread "main" java.lang.NumberFormatException: For input string: "1568"
Последний раз с такой проблемой столкнулся при решении задачи level19.lesson05.task03. Считываю строку из файла и разбиваю ее на массив строк методом .split(" "), а затем преобразую строки в числа (если это возможно, если нет - перехватываю исключение и ничего не делаю), первое число в строке почему-то игнорируется. Кто-нибудь сталкивался с таким, или кто знает в чем беда? p.s. Компилятор на сайте мой код пропускает!
Комментарии (7)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
nanoezhik
Уровень 41
29 октября 2014, 09:57
Вот что нарыл: проблема была всегда в начале файла, т.е. если число нужно прочитать из начала файла. Дело все в том, что многие текстовые редакторы (вроде как не все) добавляют в начало файла маркер, позволяющий легко определить кодировку файла. Я выщемил вот этот символ: (char) 65279. Как узнать его истинное лицо не знаю, есть только его интовое представление. Проблема решается заменой char на char, т.е. .replace((char) 65279, ' '). После чего спокойно разбиваем split — ом строку и выделяем числа. Буду рад если кому-то помог.
blacky
Уровень 23
29 октября 2014, 11:32
Да, это, скорее всего, BOM (Byte Order Mark). Я почти всегда файлы сохраняю как «UTF as ASCII» без BOM. Что-то похожее на "magic number". Исправляется так Encoding\ encoding UTF-8 without BOM. then save that.
Глянь в Notepad++ файл любого скомпилированного Java класса — посмотри его "magic number" =)
И на закуску на будущее посмотри про кодовые точки. Вместо char следует использовать int. Т.к. представлением символа в Java с 5 версии является 32битная кодовая точка.
nanoezhik
Уровень 41
29 октября 2014, 12:38
Большое спасибо, очень полезная статья, действительно в начале файла стоит Byte Order Mark. Все более менее стало понятно…
blacky
Уровень 23
29 октября 2014, 02:40
Обычно юзают статический метод String.trim() когда парсят число Integer.parseInt(s.trim())
String.split("\\s") — тоже хорошее решение.
Кстати, как читаешь из файла? По байтам или построчно?
nanoezhik
Уровень 41
29 октября 2014, 09:49
читаю построчно…
CynepHy6
Уровень 34
29 октября 2014, 02:31
в начале строки находится какой нибудь магический байт который не дает правильно распарсить число.
попробуй использовать .split("\\s")
может поможет
nanoezhik
Уровень 41
29 октября 2014, 09:49
таки магический байт! (вернее char)...))