Есть ли лучшая практика для преобразования любой строки входного числа (int, double и т. д.) в соответствующий объект/примитивный тип объекта Wrapper в java?
Этого можно достичь с помощью методов valueOf()
или parseXXX()
. но я должен знать базовый формат строки, прежде чем выбирать соответствующий тип.
Что я делаю, так это анализирую числовую строку на длинную, используя NumberUtils
из commons-lang.jar следующим образом:
long longValue= (long) NumberUtils.toLong(numberString);
но проблема в том, что если numberString
имеет значение double
, то он не сможет разобрать число и вернет 0.0
как проанализированное значение. Только следующий оператор отлично работает для двойных значений:
Long longValue = (long) NumberUtils.toDouble(numberString);
Есть ли общий способ сделать это? также я не забочусь о цифрах после запятой.
Спасибо за чтение.
Обновить
Это выглядит элегантным решением для меня, предложенным @Thomas:
NumberFormat numberFormat = NumberFormat.getNumberInstance();
long longValue = numberFormat.parse(targetFieldValue).longValue();
поскольку метод parse()
возвращает объект-оболочку Long
или Double
, его можно проверить и соответственно назначить для общего использования. Единственная загвоздка здесь в том, что parse()
может выдать ParseException
, поэтому с ним нужно обращаться в соответствии с требованиями.
Я использовал это, чтобы решить свою проблему, но мне любопытно узнать о любых других решениях!
DecimalFormat#parse()
, который с настройками по умолчанию должен возвращатьDouble
для чисел с плавающей запятой иLong
для целых чисел. - person Thomas   schedule 11.11.2014Long
? - person Duncan Jones   schedule 11.11.2014NumberFormat numberFormat = NumberFormat.getNumberInstance(); long longValue = numberFormat.parse(targetFieldValue).longValue();
поскольку методparse()
возвращает объект-оболочкуLong
илиDouble
, его можно проверить и соответственно назначить для общего использования. Единственная загвоздка здесь в том, чтоparse()
может броситьParseException
, поэтому его нужно поймать и обработать в соответствии с требованиями. - person Diablo   schedule 11.11.2014NumberUtils.createNumber()
? Он предназначен для преобразования строки в соответствующий тип оболочки. - person Duncan Jones   schedule 12.11.2014