¿Cómo convertir String a long en Java?


401

Recibí una pregunta simple en Java: ¿Cómo puedo convertir un archivo Stringobtenido por Long.toString()a long?


1
5 maneras con ejemplos de cómo convertir cadenas a largas en Java
Somnath Muluk

1
Internamente, todas las versiones llaman al método Long.parseLong (String) . Úselo directamente. Ahorre algunos ciclos de CPU.
lokesh

Respuestas:


666

Utilizar 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
¿Qué pasa con "Almuerzo / Cena"?
Narendra Sorathiya

buen código su trabajo
sirmagid

140

Para convertir una cadena en un largo (objeto), useLong.valueOf(String s).longValue();

Ver enlace


1
Eso no es lo que OP pregunta.
Christian Mann

77
@Belgi. No, vuelvejava.lang.Long
Alexander Pogrebnyak

@Belgi - Long.valueOf devuelve un Long, no una cadena.
Don Roby

44
@MikeDaniels, porque esta es una forma muy indirecta de hacerlo. Ver docs.oracle.com/javase/7/docs/api/java/lang/… , devuelve un objeto Long y no el primitivo long.
Pacerier

Long.valueOf (String s) da un Long (objeto) y Long.valueOf (String s) .longValue () da el largo (primitivo).
Campeón

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

El mejor enfoque es Long.valueOf(str)que se basa en Long.valueOf(long)el uso de una memoria caché interna que lo hace más eficiente, ya que reutilizará si es necesario las instancias en caché de Longir -128a 127incluidas.

Devuelve una Longinstancia que representa el valor largo especificado. Si no se requiere una nueva instancia Long, este método generalmente se debe usar con preferencia al constructor Long(long), ya que es probable que este método produzca un rendimiento de espacio y tiempo significativamente mejor al almacenar en caché los valores solicitados con frecuencia. Tenga en cuenta que, a diferencia del método correspondiente en la clase Integer, este método no es necesario para almacenar en caché los valores dentro de un rango particular.

Gracias al desempaquetado automático que permite convertir la instancia de una clase contenedora en su tipo primitivo correspondiente, el código sería:

long val = Long.valueOf(str);

Tenga en cuenta que el código anterior aún puede arrojar un NumberFormatExceptionsi el proporcionado Stringno coincide con un firmado long.

En términos generales, es una práctica buena para usar el staticmétodo de fábrica valueOf(str)de una clase contenedora como Integer, Boolean, Long, ... ya que la mayoría de ellos reutilizar casos siempre que sea posible, haciéndolos potencialmente más eficiente en términos de consumo de memoria que los correspondientes parsemétodos o constructores .


Extracto de Java efectivo Item 1 escrito por Joshua Bloch :

A menudo puede evitar crear objetos innecesarios utilizando métodos de fábrica estáticos (Elemento 1) en lugar de constructores en clases inmutables que proporcionan ambos. Por ejemplo, el método estático de fábrica Boolean.valueOf(String)casi siempre es preferible al constructor Boolean(String). El constructor crea un nuevo objeto cada vez que se lo llama, mientras que el método de fábrica estático nunca se requiere para hacerlo y no lo hará en la práctica.


1
Vale la pena señalar que el compilador "desugared" automáticamente, para el caso de long -> Long, Long.valueOf (primitiveLong). Entonces Long number = Long.valueOf("123"), Long number = Long.parseLong("123")y Long number = Long.valueOf(Long.parseString("123")todos terminan haciendo más o menos lo mismo. Lo que debes tener cuidado es no llamar a los constructores de las clases primitivas en caja, eso puede ser un desperdicio. Así que no escribasLong number = new Long(parseLong("123"))
Ian Robertson

4

Hay alguna forma de convertir cadenas a enteros :

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

Podemos acortar a:

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

O solo

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

4) Usando el formato 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

Es bastante simple, usa Long.valueOf(String s);

Por ejemplo:

String s;
long l;

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

Ya terminaste !!!


0

Para aquellos que cambiaron a Kotlin sólo tiene que utilizar
string.toLong()
que llamará Long.parseLong(string)bajo el capó


-1

En caso de que esté utilizando el Mapa sin genérico, debe convertir el valor en Cadena y luego intentar convertirlo en Largo. A continuación se muestra el código de muestra

    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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.