Как преобразовать String в long в Java?

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

Ответ 1

 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

Ответ 2

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

Смотрите ссылку

Ответ 3

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());
      }

   }
}

Ответ 4

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

Ответ 5

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

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

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

long val = Long.valueOf(str);

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

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


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

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

Ответ 6

Если вы используете карту с общим, то вам нужно преобразовать значение в String, а затем попытаться преобразовать в Long. Ниже приведен пример кода

    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);