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


401

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


1
5 способов с примерами того, как преобразовать строку в long в Java
Сомнат Мулук

1
Внутренне все версии вызывают метод Long.parseLong (String) . Используйте это напрямую. Сохранить несколько циклов процессора.
Локеш

Пожалуйста, обратитесь к этому: developer.android.com/reference/java/lang/…
Михир Триведи

Ответы:


666

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

2
как насчет "Обед / Ужин"?
Нарендра Соратия,

хороший код его работа
sirmagid

140

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

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


1
Это не то, что спрашивает ОП.
Кристиан Манн

7
@Belgi. Нет, возвращаетсяjava.lang.Long
Александр Погребняк

@Belgi - Long.valueOf возвращает Long, а не строку.
Дон Роби

4
@MikeDaniels, потому что это очень косвенный способ сделать это. См. Docs.oracle.com/javase/7/docs/api/java/lang/… , он возвращает объект Long, а не примитивный long.
Pacerier

Long.valueOf (String s) дает Long (объект), а Long.valueOf (String s) .longValue () дает long (примитив).
Чемпион

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

   }
}


5

Наилучший подход заключается 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методы или конструкторах ,


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

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


1
Стоит отметить, что автоматическая распаковка "откатывается" компилятором в случае long -> Long, Long.valueOf (primitiveLong). Таким образом Long number = Long.valueOf("123"), Long number = Long.parseLong("123")и Long number = Long.valueOf(Long.parseString("123")все в конечном итоге делает почти то же самое. То , что вы действительно хотите быть осторожными, не вызывая конструктор боксовых примитивных классов - это может быть расточительными. Так что не пишитеLong number = new Long(parseLong("123"))
Ян Робертсон

4

Есть несколько способов преобразовать строку в Integer :

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

1

Это довольно просто, использовать Long.valueOf(String s);

Например:

String s;
long l;

Scanner sc=new Scanner(System.in);
s=sc.next();
l=Long.valueOf(s);
System.out.print(l);

Вы сделали !!!


0

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


-1

В случае, если вы используете Map без использования generic, вам необходимо преобразовать значение в 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);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.