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



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

723   8  

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

для преобразования a строка до долго (объект), используйте 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 включено.

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

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

long val = Long.valueOf(str);

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

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


выдержка из Эффективная JavaItem 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) используя декабрьский формат:

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

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

Comments

    Ничего не найдено.