J'ai une question simple en Java: comment convertir un fichier String
obtenu par Long.toString()
en long
?
J'ai une question simple en Java: comment convertir un fichier String
obtenu par Long.toString()
en long
?
Réponses:
Utilisation 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
Pour convertir une chaîne en un objet long (objet), utilisezLong.valueOf(String s).longValue();
Voir lien
java.lang.Long
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());
}
}
}
Long.valueOf (String s) - il est évident que des précautions doivent être prises pour se protéger contre les non-nombres si cela est possible dans votre code.
La meilleure approche consiste Long.valueOf(str)
à s'appuyer sur celui Long.valueOf(long)
qui utilise un cache interne, ce qui le rend plus efficace car il réutilisera si nécessaire les instances mises en cache pour Long
passer de -128
à 127
incluses.
Renvoie une
Long
instance représentant la valeur longue spécifiée. Si une nouvelle instance Long n'est pas requise, cette méthode doit généralement être utilisée de préférence au constructeurLong(long)
, car cette méthode est susceptible de produire des performances d'espace et de temps nettement meilleures en mettant en cache les valeurs fréquemment demandées. Notez que contrairement à la méthode correspondante dans la classe Integer, cette méthode n'est pas requise pour mettre en cache des valeurs dans une plage particulière.
Grâce à l' auto-unboxing permettant de convertir l'instance d'une classe wrapper en son type primitif correspondant, le code serait alors:
long val = Long.valueOf(str);
Veuillez noter que le code précédent peut toujours lancer un NumberFormatException
si le fourni String
ne correspond pas à un signé long
.
D'une manière générale, il est une bonne pratique d'utiliser la static
méthode de fabrication valueOf(str)
d'une classe wrapper comme Integer
, Boolean
, Long
, ... puisque la plupart d'entre eux réutilisent cas chaque fois qu'il est possible ce qui les rend à terme potentiellement plus efficace de l' empreinte mémoire que les correspondants parse
méthodes ou constructeurs .
Extrait de Java efficace Item 1
écrit par Joshua Bloch :
Vous pouvez souvent éviter de créer des objets inutiles en utilisant des méthodes d'usine statiques (élément 1) de préférence aux constructeurs sur des classes immuables qui fournissent les deux. Par exemple, la méthode d'usine statique
Boolean.valueOf(String)
est presque toujours préférable au constructeurBoolean(String)
. Le constructeur crée un nouvel objet chaque fois qu'il est appelé, alors que la méthode d'usine statique n'est jamais requise pour le faire et ne le sera pas en pratique.
Long number = Long.valueOf("123")
, Long number = Long.parseLong("123")
et Long number = Long.valueOf(Long.parseString("123")
tous finissent par faire à peu près la même chose. Ce que vous ne voulez faire attention à n'appelle les constructeurs des classes primitives boxed - qui peut être un gaspillage. Alors n'écrivez pasLong number = new Long(parseLong("123"))
Il existe un moyen de convertir une chaîne en entier :
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();
Nous pouvons raccourcir pour:
String numberAsString = "1234";
long number = new Long(numberAsString).longValue();
Ou juste
long number = new Long("1234").longValue();
4) En utilisant le format 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.");
}
C'est assez simple, utilisez
Long.valueOf(String s);
Par exemple:
String s;
long l;
Scanner sc=new Scanner(System.in);
s=sc.next();
l=Long.valueOf(s);
System.out.print(l);
Vous avez terminé!!!
Pour ceux qui sont passés à Kotlin, utilisez simplement
string.toLong()
That will call Long.parseLong(string)
under the hood
Dans le cas où vous utilisez la carte sans générique, vous devez convertir la valeur en chaîne, puis essayer de convertir en long. Voici un exemple de code
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);