Как конвертировать String в long в Java?

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

8 ответов


использовать 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

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

посмотреть ссылке


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

   }
}

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


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

возвращает 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). Конструктор создает новый объект каждый раз она называется, а статический метод фабрики никогда требуется сделать это и не будет на практике.


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

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.");
   }

Если вы используете карту без универсального, вам нужно преобразовать значение в строку, а затем попытаться преобразовать в 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);

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