Как конвертировать String в long в Java? - PullRequest
378 голосов
/ 08 октября 2011

Я получил простой вопрос на Java: как я могу преобразовать String, полученный Long.toString() в long?

Ответы [ 8 ]

634 голосов
/ 08 октября 2011

Использование Long.parseLong()

 Long.parseLong("0", 10)        // returns 0L
 Long.parseLong("473", 10)      // returns 473L
 Long.parseLong("-0", 10)       // returns 0L
 Long.parseLong("-FF", 16)      // returns -255L
 Long.parseLong("1100110", 2)   // returns 102L
 Long.parseLong("99", 8)        // throws a NumberFormatException
 Long.parseLong("Hazelnut", 10) // throws a NumberFormatException
 Long.parseLong("Hazelnut", 36) // returns 1356099454469L
 Long.parseLong("999")          // returns 999L
137 голосов
/ 08 октября 2011

Чтобы преобразовать String в Long (объект), используйте Long.valueOf(String s).longValue();

См. ссылка

27 голосов
/ 08 октября 2011
public class StringToLong {

   public static void main (String[] args) {

      // String s = "fred";    // do this if you want an exception

      String s = "100";

      try {
         long l = Long.parseLong(s);
         System.out.println("long l = " + l);
      } catch (NumberFormatException nfe) {
         System.out.println("NumberFormatException: " + nfe.getMessage());
      }

   }
}
11 голосов
/ 08 октября 2011

Long.valueOf (String s) - очевидно, необходимо соблюдать осторожность для защиты от нечисловых значений, если это возможно в вашем коде.

4 голосов
/ 28 ноября 2016

Наилучшим подходом является Long.valueOf(str), поскольку он опирается на Long.valueOf(long), который использует внутренний кэш, что делает его более эффективным, поскольку при необходимости он будет повторно использовать кэшированные экземпляры Long переход от -128 к 127 включен.

Возвращает экземпляр Long, представляющий указанное длинное значение.Если новый экземпляр Long не требуется, этот метод обычно следует использовать вместо конструктора Long(long), поскольку этот метод, вероятно, даст значительно лучшую производительность в пространстве и времени за счет кэширования часто запрашиваемых значений.Обратите внимание, что в отличие от соответствующего метода в классе Integer, этот метод не требуется для кэширования значений в определенном диапазоне.

Благодаря автоматическое удаление позволяя преобразовать экземпляр класса-обертки в соответствующий ему примитивный тип, код будет:

long val = Long.valueOf(str);

Обратите внимание, что предыдущий код все еще может выдать NumberFormatException, если предоставленный String несовпадать со знаком long.

Вообще говоря, хорошей практикой является использование static фабричного метода valueOf(str) класса-оболочки, такого как Integer, Boolean, Long,... поскольку большинство из них повторно используют экземпляры всякий раз, когда это возможно, делая их потенциально более эффективными с точки зрения использования памяти, чем соответствующие parse методы или конструкторы.


Отрывок из Эффективная Java Item 1, написанная Джошуа Блохом :

Вы часто можете избежать создания ненужных объектов, используя статические фабричные методы (пункт 1) предпочтительнее конструкторов на неизменяемых классах, которые обеспечивают оба.Например, метод статической фабрики Boolean.valueOf(String) почти всегда предпочтительнее конструктора Boolean(String).Конструктор создает новый объект каждый раз, когда он вызывается, в то время как статический метод фабрики никогда не требует этого и на практике не будет.

0 голосов
/ 17 января 2018

Существует несколько способов преобразования строки в целое число :

1)

long l = Long.parseLong("200"); 

2)

String numberAsString = "1234";
long number = Long.valueOf(numberAsString).longValue();

3)

 String numberAsString = "1234";
  Long longObject = new Long(numberAsString);
  long number = longObject.longValue();

Мы можем сократить до:

String numberAsString = "1234";
long number = new Long(numberAsString).longValue();

или просто

long number = new Long("1234").longValue();

4) Использование формата Decemal:

    String numberAsString = "1234";
      DecimalFormat decimalFormat = new DecimalFormat("#");
     try {
        long number = decimalFormat.parse(numberAsString).longValue();
        System.out.println("The number is: " + number);
    } catch (ParseException e) {
     System.out.println(numberAsString + " is not a valid number.");
   }
0 голосов
/ 16 января 2018

Для тех, кто перешел на Kotlin, просто используйте
string.toLong()
Это будет называть Long.parseLong(string) под капотом

0 голосов
/ 15 апреля 2014

В случае, если вы используете карту без универсального, вам нужно конвертировать значение в строку, а затем попытаться преобразовать в длинный.Ниже приведен пример кода

    Map map = new HashMap();

    map.put("name", "John");
    map.put("time", "9648512236521");
    map.put("age", "25");

    long time = Long.valueOf((String)map.get("time")).longValue() ;
    int age = Integer.valueOf((String)  map.get("aget")).intValue();
    System.out.println(time);
    System.out.println(age);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...