Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > StrToInt?????


Автор: Riki_tiki_tavi 20.4.2005, 18:23
Доброго времени суток всем! Вот, нужда заставляет меня и начать писать на яве. Естественно и возникают такие дурацкие вопросы: как преобразовать String в int, есть ли стандартные функции или писать свою? Помогите пожалуйста smile

Автор: Domestic Cat 20.4.2005, 18:33
Код

int i = Integer.parseInt("1223");

Автор: Riki_tiki_tavi 20.4.2005, 18:40
точно, спасибо, странно, я не посмотрел в Integer, а мне почему то казалось что это должно было быть в String'е... Ладно, все равно извините за дурацкий вопрос, с кем не бывает smile

Автор: AntonSaburov 20.4.2005, 19:16
Цитата(Riki_tiki_tavi @ 20.4.2005, 18:40)
Ладно, все равно извините за дурацкий вопрос, с кем не бывае

Какие проблемы - заходи и спрашивай. Мы для этого и существуем.

Автор: Guest 26.4.2005, 14:41
Лучше так:
Код

int n;
try {
  n = Integer.parseInt(str);
} catch (NumberFormatException ex) {
  n = 0;
}


Автор: batigoal 26.4.2005, 14:46
Ну так и было предложено выше, только без подробностей.

Автор: Stampede 26.4.2005, 20:39
Цитата(Guest @ 26.4.2005, 14:41)
Лучше так:


Ничего не лучше. Программерам, которые втихушку "глотают" эксепшены, надо просто отрывать руки.

Это на самом деле огромниый топик сам по себе, но в двух словах дело обстоит так. Преобразовывать строку в число приходится в основном при обработке входных данных, источником которых может быть что угодно: девайс, другая программа, юзерский ввод и т. д.

Если строка содержит вместо ожидаемого числа всякие кракозябры, на это надо немедленно реагировать! При этом любая вменяемая программа должна сделать как минимум две вещи: занести в лог запись об ошибке и вывести сообщение пользователю. Чего многие не понимают, это что это два совершенно разных типа сообщений. В логи нужно занести как можно больше полезной информации для скорейшего отлова и фиксения (если это баг). А юзеру нужно выдать теплое человеческое сообщение о том, что случился кирдык и, если это ошибка ввода, вежливо попросить ввести данные заново. В противном случае попросить связаться со службой поддержки, не забыв указать референс намбер ошибки.

Так вот, в случае с исходным вариантом (без ловли эксепшена), если что случись, исключение пойдет вверх по стеку вызовов и есть шанс что рано или поздно наткнется на блок, который знает, что с ним делать. А так, как ты написал - ноль-то он присвоит, да вот аукнуться это может совершенно в другом месте программы, которое отстоит от твоего кода километров на десять. И ищи его свищи.

А ты говоришь smile

Автор: Domestic Cat 26.4.2005, 21:23
Ну устроили из-за трай-кетча smile
На форуме чаще всего выкладывается сырой код, потому что просто времени нет ловить все иксепшны, наводить красоту и т п. На конкретный вопрос дается конкретный ответ.

Автор: Stampede 26.4.2005, 22:07
Цитата(Domestic @ 26.4.2005, 21:23)
Ну устроили из-за трай-кетча


Дык, кто устроил-то? Ты вот просто дал код, коротко и по теме. И тут приходит какой-то [beep] с бугра - ни имени, ни отчества, и с порога заявляет, что вот так вот будет лучше. А ведь этот топик может и незамутненному неофиту на глаза попасться, и уверует человек, что и вправду так лучше.

Не будет так лучше, товарищ Гуест. Почему - тебе объяснили. Хочешь поспорить - валяй, только будь добр зарегистрируйся сначала. А то такое чувство, что с привидением разговариваешь smile

Автор: Domestic Cat 26.4.2005, 22:14
Верно говоришь smile


Автор: Fantasist 26.4.2005, 23:05
Цитата(Stampede @ 26.4.2005, 19:07)
Не будет так лучше, товарищ Гуест.


Ну. Ну. Вполне возможно, что логика программы отвечает такому решению. Мы ведь не знаем. smile Грамотная обработка ошибок - это очень большая и сложная тема.


Автор: Stampede 27.4.2005, 00:19
Цитата(Fantasist @ 26.4.2005, 23:05)
Вполне возможно, что логика программы отвечает такому решению.


Не спорю! Очень даже может такое быть! Только не надо предлагать это в качестве безусловно "более лучшего" решения, не потрудившись даже обозначить границы применимости.

Цитата(Fantasist @ 26.4.2005, 23:05)
Грамотная обработка ошибок - это очень большая и сложная тема.


Тоже верно. Как верно и то, что существуют все-таки фундаментальные принципы и общие guidelines. Прошу заметить, я ведь не проповедовал какой-то конкретный подход, типа там fine-grained app exceptions или раннее/позднее ловление или exception wrapping или еще что-нибудь - это все как раз application-specific и up to the implementation.

А вот то, что я сказал по поводу отдельных задач логирования и выдачи пользовательских сообщений - это, пожалуй, наменьший общий знаменатель, который можно подвести под большинство стратегий обрабртки ошибок.

Автор: Zandr 27.4.2005, 06:16
[off]
Цитата
какой-то [beep] с бугра

Сильно smile
[/off]

Автор: Fantasist 27.4.2005, 09:59
Stampede

Гм... А совсем по-русски уже не получается. smile

Цитата(Stampede @ 26.4.2005, 21:19)
Как верно и то, что существуют все-таки фундаментальные принципы и общие guidelines.


Согласен. Я имел в виду, что начинать разговор о правильности обработки ошибок в треде StrToInt как бы... слегка не к месту. smile



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)