Як перетворити String в long в Java?


400

У мене просте питання в Java: Як я можу перетворити , Stringякий був отриманий Long.toString()в long?


1
5 способів із прикладами того, як перетворити рядок на довгий в Java
Somnath Muluk

1
Внутрішньо всі версії викликають метод Long.parseLong (String) . Використовуйте його безпосередньо. Збережіть кілька циклів процесора.
lokesh

Будь ласка , зверніться до цього: developer.android.com/reference/java/lang / ...
Mihir Trivedi

Відповіді:


664

Використовуйте 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

Щоб перетворити рядок у довгий (об'єкт), використовуйте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/… , він повертає Довгий об'єкт не первісний довгий.
Pacerier

Long.valueOf (String s) дає Long (об'єкт), а Long.valueOf (String s). LongValue () дає довге (примітивне).
Чемпіон

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методи або конструкторах .


Уривок з ефективної Java, 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

Існує певний спосіб перетворити рядок у цілий ряд :

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

Для тих, хто перейшов на Котлін, просто використовуйте
string.toLong()
That call Long.parseLong(string)під капотом


-1

Якщо ви використовуєте Map з загальним, вам потрібно перетворити значення в 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.