2011-10-07 22 views
311

Tengo una pregunta simple en Java: ¿Cómo puedo convertir un String que se obtuvo por Long.toString() a long?Cómo convertir String a long en Java?

+1

[5] maneras con ejemplos (http://javadevnotes.com/java-string-to-long-examples) para cómo convertir cadena a largo en Java –

Respuesta

552

Uso 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 
+6

http://www.coderanch.com/t/394194/java/java/parseLong-String-int-radix-radix – Jay

+0

¿Qué tal "Almuerzo/Cena"? –

+1

El segundo argumento es radix. De nada. – Brikowski

132

Para convertir una cadena a un largo (objeto) , utilice Long.valueOf(String s).longValue();

Ver link

+1

Eso no es lo que OP está preguntando. –

+7

No veo por qué esto fue downvoted. No está mal. –

+0

Creo que valueOf devuelve una cadena ... – Belgi

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

    } 
} 
+0

no funciona bien – Erum

10

Long.valueOf(String s) - obviamente se debe tener cuidado de proteger contra no números si eso es posible en su código.

+3

nota: este método devuelve no 'long' pero' Long' object –

0

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

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

El mejor enfoque es Long.valueOf(str) ya que se basa en Long.valueOf(long) que utiliza una caché interna por lo que es más eficiente ya que volverá a utilizar si es necesario los casos en caché de Long que van de -128 a 127 incluido.

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

Gracias a auto-unboxing que permite convertir instancia de una clase contenedora en su tipo primitivo correspondiente, el código serían entonces:

long val = Long.valueOf(str); 

Tenga en cuenta que el código anterior todavía puede lanzar una NumberFormatException si el proporcionado String no coincide con un long firmado.

En términos generales, es una buena práctica utilizar el método static 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 la huella de memoria que los métodos parse correspondientes o constructores.


Extracto de Effective JavaItem 1 escrito por Joshua Bloch:

A menudo se puede evitar la creación de objetos innecesarios mediante el uso de estática métodos de fábrica (Artículo 1) con preferencia a los constructores de inmutable clases que proporcionan ambos. Por ejemplo, el método de fábrica estático Boolean.valueOf(String) es casi siempre preferible al constructor Boolean(String). El constructor crea un nuevo objeto cada vez que es llamado, mientras que el método de fábrica estático nunca es requerido para hacerlo y no lo hará en la práctica.

+0

Vale la pena señalar que el auto-unboxing es "desagrupado" por el compilador en, 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 ")' todo termina haciendo más o menos lo mismo. Lo que * desea * tener cuidado no es llamar a constructores de las clases primitivas en caja, eso puede ser un desperdicio. Por lo tanto, no escriba 'Número largo = nuevo Largo (parseLong (" 123 ")) ' –

0

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

0

Hay alguna manera de convertir una cadena a un entero:

1)

long l = Long.parseLong("200"); 

2)

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

3)

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

Nos puede acortar a:

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

o sólo

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

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