metaclass: (дзедline)
metaclass ([personal profile] metaclass) wrote2013-03-21 11:25 am
Entry tags:

java try parse integer

А почему в java нету готовых методов, которые бы позволяли парсить числа, не кидая исключений?
Т.е. возвращали бы true+число, либо false, типа как int.TryParse в дотнете.

[identity profile] andrew kondratovich (from livejournal.com) 2013-03-21 09:43 am (UTC)(link)
  public static int getInteger(String value, int def) {
    try {
      return Integer.parseInt(value);
    } catch (Exception e) {
      return def;
    }
  }
Edited 2013-03-21 09:45 (UTC)

[identity profile] artureg.livejournal.com 2013-03-21 09:46 am (UTC)(link)
пизда пизда пизда

[identity profile] metaclass.livejournal.com 2013-03-21 09:48 am (UTC)(link)
да,
(defn parseIntDef
"convert string to int"
[str & [default]]
(try (Integer/parseInt str)
(catch Exception _ default)))

Но наличие таких функций в моей библиотеке меня огорчает :)

[identity profile] andrew kondratovich (from livejournal.com) 2013-03-21 11:20 am (UTC)(link)
Ну а как иначе жить

[identity profile] andrew kondratovich (from livejournal.com) 2013-03-21 01:45 pm (UTC)(link)
кэмел кейс в кложуре - а как же православные дэши ?

[identity profile] metaclass.livejournal.com 2013-03-21 02:01 pm (UTC)(link)
Я одновременно пишу на F#/C#/жабе/clojure/Delphi и С++, из-за чего меня периодически переклинивает и я путаю стили кода. И пока нет возможности из этого исключить лишние языки.

[identity profile] zmila.livejournal.com 2013-03-21 02:49 pm (UTC)(link)
(type (read-string "1234"))
; java.lang.Long
(type (read-string "aaa1234"))
; clojure.lang.Symbol
(type (read-string "(print 21)"))
; clojure.lang.PersistentList

только хотел сказать, что всё красиво, но

(type (read-string "1234bbb"))
; NumberFormatException Invalid number: 1234bbb clojure.lang.LispReader.readNumber (LispReader.java:258)

[identity profile] dnnx.livejournal.com 2013-03-21 12:33 pm (UTC)(link)
catch (Exception e)

[identity profile] zmila.livejournal.com 2013-03-21 02:44 pm (UTC)(link)
NumberFormatException

за ловлю голого Exception нужно пальцы дверью зажимать. сначала на ногах, при рецидиве - на руках и вон из профессии :)

[identity profile] andrew kondratovich (from livejournal.com) 2013-03-21 03:11 pm (UTC)(link)
оттуда может вылететь 2 исключения. Писать 2 кетча или один общий. Теоретики блин один лучше другого.

[identity profile] sergiej.livejournal.com 2013-03-21 03:52 pm (UTC)(link)
Чож сразу не Throwable???
Эксепшн это дорогая штука для жаба машины. То что вы написали это, несмотря на корректную работу, обычная индусятина.

[identity profile] andrew kondratovich (from livejournal.com) 2013-03-22 06:58 am (UTC)(link)
Выше уже писали - не смотря на то, что эксепшены для исключительный ситуаций, в данном случае подобное их использование в виде управляющих конструкций навязано отсутствием других вменяемых вариантов.

[identity profile] sergiej.livejournal.com 2013-03-23 05:39 pm (UTC)(link)
Никак не оправдано. В данном случае надо проверить, правильный ли номер, а не парсить, поэтому надо использовать NumberFormat в месте возникновения сомнительного стринга-интежера.
Про сами эксепшны вопрос, скорее, академический. Вот пример, у вас пользователь вводит логин и пароль. Факт ввода неправильного пароля это эксепшн?
К вашему коду претензия другого плана. Что толку от вашего возвращения некого дефолта? Вам в месте вызова этой функции надо проставлять этот дефолт, обрабатывать потом результат, не пришёл ли дефолт. Не говоря о том, что в таком случае парсинг самого дефолта невозможен. Всё это в совокупности - индусятина. Лучше уж сразу в месте вызова ловить эксепшн и обрабатывать.