Como converter String para long em Java?

Respostas:

666

Usar 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
fonte
2
o que dizer de "almoço / jantar"?
Narendra Sorathiya
código legal. seu trabalho
sirmagid
140

Para converter uma String em um Long (objeto), useLong.valueOf(String s).longValue();

Ver link

coreyspitzer
fonte
11
Não é isso que o OP está pedindo.
Christian Mann
7
@Belgi. Não, ele volta #java.lang.Long
Alexander Pogrebnyak
@Belgi - Long.valueOf retorna um Long, não uma string.
Don Roby
4
@ MikeDaniels, porque esta é uma maneira muito indireta de fazê-lo. Consulte docs.oracle.com/javase/7/docs/api/java/lang/… , ele retorna um objeto Long e não o primitivo long.
Pacerier 17/06
Long.valueOf (String s) fornece um Long (objeto) e Long.valueOf (String s) .longValue () fornece o long (primitivo).
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
fonte
11

Long.valueOf (String s) - obviamente, deve-se tomar o devido cuidado para proteger contra não-números, se isso for possível no seu código.

markdsievers
fonte
5

A melhor abordagem é Long.valueOf(str)a de Long.valueOf(long)que usa um cache interno, tornando-o mais eficiente, pois reutilizará, se necessário, as instâncias em cache de Longpassar -128para o 127incluído.

Retorna uma Longinstância que representa o valor longo especificado. Se uma nova instância Long não for necessária, esse método geralmente deve ser usado preferencialmente ao construtor Long(long), pois esse método provavelmente produzirá um desempenho de espaço e tempo significativamente melhor armazenando em cache os valores solicitados com freqüência. Observe que, diferentemente do método correspondente na classe Integer, esse método não é necessário para armazenar em cache valores dentro de um intervalo específico.

Graças ao auto-unboxing, que permite converter a instância de uma classe de wrapper em seu tipo primitivo correspondente, o código seria:

long val = Long.valueOf(str);

Observe que o código anterior ainda pode gerar um NumberFormatExceptionse o fornecido Stringnão corresponder a um assinado long.

De um modo geral, é uma boa prática para usar o staticmétodo de fábrica valueOf(str)de uma classe de mensagens publicitárias como Integer, Boolean, Long, ... pois a maioria deles reutilizar casos sempre é possível fazê-los potencialmente mais eficiente em termos de consumo de memória do que os correspondentes parsemétodos ou construtores .


Trecho do Java eficaz Item 1 escrito por Joshua Bloch :

Muitas vezes, você pode evitar a criação de objetos desnecessários usando métodos estáticos de fábrica (Item 1), em vez de construtores em classes imutáveis ​​que fornecem os dois. Por exemplo, o método estático de fábrica Boolean.valueOf(String)é quase sempre preferível ao construtor Boolean(String). O construtor cria um novo objeto cada vez que é chamado, enquanto o método estático de fábrica nunca é necessário e, na prática, não é necessário.

Nicolas Filotto
fonte
11
Vale a pena notar que o desempacotamento automático é "desapropriado" pelo compilador para, no caso de long -> Long, Long.valueOf (primitiveLong). Então Long number = Long.valueOf("123"), Long number = Long.parseLong("123")e Long number = Long.valueOf(Long.parseString("123")todos acabam fazendo praticamente a mesma coisa. O que você não quer ser cuidadoso sobre não está chamando construtores das classes primitivas em caixa - que pode ser um desperdício. Portanto, não escrevaLong number = new Long(parseLong("123"))
Ian Robertson
4

Há alguma maneira de converter string para Inteiro :

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 reduzir para:

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

Ou apenas

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

4) Usando o 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.");
   }
Hoque MD Zahidul
fonte
1

É bem simples, use Long.valueOf(String s);

Por exemplo:

String s;
long l;

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

Você Terminou!!!

Prajwal Shinde
fonte
0

Para aqueles que mudaram para Kotlin, basta usar
string.toLong()
Isso chamará Long.parseLong(string)sob o capô

Leo Droidcoder
fonte
-1

Caso você esteja usando o Mapa sem genérico, será necessário converter o valor em String e tentar converter para Long. Abaixo está o código de exemplo

    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
fonte