J'ai une simple question en Java: comment convertir une String
obtenue par Long.toString()
en long
?
Utilisez 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 long (objet), utilisez Long.valueOf(String s).longValue();
Voir lien
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) - Évidemment, vous devez prendre les précautions nécessaires pour vous protéger contre les non-chiffres si cela est possible dans votre code.
La meilleure approche est Long.valueOf(str)
car elle repose sur Long.valueOf(long)
qui utilise un cache interne le rendant plus efficace car il réutilisera si nécessaire les instances mises en cache de Long
à partir de -128
à 127
inclus.
Renvoie une instance
Long
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 produira probablement de meilleures performances spatio-temporelles 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 obligée de mettre en cache les valeurs d'une plage donnée.
Grâce à 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 String
fourni ne correspond pas à un long
signé.
En règle générale, il est recommandé d’utiliser la méthode static
de la fabrique valueOf(str)
d’une classe d’emballage telle que Integer
, Boolean
, Long
, ..., la plupart d’entre elles étant réutilisées. cas où cela est possible, ce qui les rend potentiellement plus efficaces en terme d’empreinte mémoire que les méthodes ou constructeurs parse
correspondants.
Extrait de Effective Java Item 1
écrit par Joshua Bloch :
Vous pouvez souvent éviter de créer des objets inutiles en utilisant les méthodes fabriques statiques (Item 1) plutôt que les constructeurs sur des classes immuables qui fournissent les deux. Par exemple, la méthode de fabrique statique
Boolean.valueOf(String)
est presque toujours préférable au constructeurBoolean(String)
. Le constructeur crée un nouvel objet à chaque appel, alors que la méthode de la fabrique statique n’est jamais nécessaire et n’est pas utilisée dans la pratique.
Pour ceux qui sont passés à Kotlin, utilisez simplementstring.toLong()
Cela appellera Long.parseLong(string)
sous le capot
Il existe un moyen de convertir une chaîne en Integer:
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 à:
String numberAsString = "1234";
long number = new Long(numberAsString).longValue();
ou juste
long number = new Long("1234").longValue();
4) tilisation du 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.");
}