Jak przekonwertować ciąg znaków na długi w Javie?

400

Mam proste pytanie w Java: Jak mogę przekonwertować Stringktóre uzyskano przez Long.toString()do long?

Belgi
źródło
1
5 sposobów z przykładami konwersji łańcucha na długi w Javie
Somnath Muluk
1
Wewnętrznie wszystkie wersje wywołują metodę Long.parseLong (String) . Użyj go bezpośrednio. Zaoszczędź kilka cykli procesora.
lokesh
Proszę odnieść się do tego: developer.android.com/reference/java/lang/…
Mihir Trivedi

Odpowiedzi:

664

Posługiwać się 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
Mike Christensen
źródło
2
co z „lunchem / kolacją”?
Narendra Sorathiya
niezły kod. jego dzieło
sirmagid
140

Aby przekonwertować ciąg znaków na długi (obiekt), użyjLong.valueOf(String s).longValue();

Zobacz link

coreyspitzer
źródło
1
O to nie prosi OP.
Christian Mann,
7
@Belgi. Nie, wracajava.lang.Long
Alexander Pogrebnyak,
@Belgi - Long.valueOf zwraca Long, a nie ciąg znaków.
Don Roby
4
@MikeDaniels, ponieważ jest to bardzo pośredni sposób. Zobacz docs.oracle.com/javase/7/docs/api/java/lang/… , zwraca obiekt Długi, a nie pierwotny długi.
Pacerier
Long.valueOf (String s) daje Long (obiekt), a Long.valueOf (String s) .longValue () daje long (pierwotny).
Champ
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());
      }

   }
}
Genjuro
źródło
11

Long.valueOf (String s) - oczywiście należy zachować ostrożność, aby zabezpieczyć się przed liczbami, jeśli jest to możliwe w kodzie.

markdsievers
źródło
5

Najlepsze podejście Long.valueOf(str)polega na Long.valueOf(long)tym, że polega na tym, który wykorzystuje wewnętrzną pamięć podręczną, co czyni ją bardziej wydajną, ponieważ w razie potrzeby ponownie użyje buforowanych instancji Longprzechodzenia od -128do 127uwzględnionego.

Zwraca Longinstancję reprezentującą określoną długą wartość. Jeśli nowa instancja typu Long nie jest wymagana, metoda ta powinna być ogólnie stosowana zamiast konstruktora Long(long), ponieważ metoda ta prawdopodobnie zapewni znacznie lepszą wydajność przestrzeni i czasu dzięki buforowaniu często żądanych wartości. Należy zauważyć, że w przeciwieństwie do odpowiedniej metody w klasie Integer, ta metoda nie jest wymagana do buforowania wartości w określonym zakresie.

Dzięki automatycznemu rozpakowaniu pozwalającemu konwertować instancję klasy opakowania na odpowiadający jej typ pierwotny, kod wyglądałby następująco:

long val = Long.valueOf(str);

Pamiętaj, że poprzedni kod nadal może wyrzucić a, NumberFormatExceptionjeśli podany Stringnie pasuje do podpisanego long.

Ogólnie rzecz biorąc, jest to dobra praktyka, aby użyć staticmetody fabryki valueOf(str)z klasy otoki jak Integer, Boolean, Long, ..., ponieważ większość z nich ponowne przypadki, gdy jest to możliwe, co czyni je potencjalnie bardziej efektywny w perspektywie zużycie pamięci niż odpowiednich parsemetod i konstruktorów .


Fragment Effective Java Item 1 napisany przez Joshua Blocha :

Często można uniknąć tworzenia niepotrzebnych obiektów, stosując statyczne metody fabryczne (pozycja 1) zamiast konstruktorów w niezmiennych klasach, które zapewniają oba. Na przykład statyczna metoda fabryczna Boolean.valueOf(String)jest prawie zawsze lepsza niż konstruktor Boolean(String). Konstruktor tworzy nowy obiekt za każdym razem, gdy jest wywoływany, podczas gdy statyczna metoda fabryczna nigdy nie jest do tego wymagana i nie będzie w praktyce.

Nicolas Filotto
źródło
1
Warto zauważyć, że auto-rozpakowywanie jest „wyłączane” przez kompilator do, w przypadku long -> Long, Long.valueOf (primitiveLong). Tak Long number = Long.valueOf("123"), Long number = Long.parseLong("123")a Long number = Long.valueOf(Long.parseString("123")wszystko kończy się robi prawie to samo. To, na co chcesz uważać, to nie wywoływać konstruktorów klas prymitywnych w pudełkach - może to być marnotrawstwem. Więc nie piszLong number = new Long(parseLong("123"))
Ian Robertson
4

Istnieje sposób przekonwertowania ciągu na liczbę całkowitą :

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

Możemy skrócić do:

String numberAsString = "1234";
long number = new Long(numberAsString).longValue();

Lub tylko

long number = new Long("1234").longValue();

4) Używając formatu 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.");
   }
Hoque MD Zahidul
źródło
1

To dość proste, użyj Long.valueOf(String s);

Na przykład:

String s;
long l;

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

Jesteś skończony!!!

Prajwal Shinde
źródło
0

Dla tych, którzy przeszli na Kotlin, skorzystaj z
string.toLong()
That will call Long.parseLong(string)under the hood

Leo Droidcoder
źródło
-1

Jeśli używasz mapy bez ogólnego, musisz przekonwertować wartość na ciąg, a następnie spróbować przekonwertować na długi. Poniżej znajduje się przykładowy kod

    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);
Chetan Nellekeri
źródło