3347 votes

Comment convertir une chaîne de caractères en un nombre entier en Java ?

Comment convertir un String à un int ?

"1234"    1234

4 votes

Au passage, sachez que si la chaîne est nulle, l'appel : int i = Integer.parseInt(null) ; provoque une NumberFormatException, et non une NullPointerException.

9 votes

Je suis un peu surpris que cette question soit si bien notée alors qu'une partie importante de la spécification est manquante : que doit-il se passer si la chaîne NE contient PAS que des chiffres ? Par exemple, de nombreuses réponses analyseront volontiers "-1" et renverront -1, mais nous ne savons pas si c'est acceptable.

1 votes

La question doit préciser le radix. Est-ce 10, 16, 8 ? quoi ? Peut-être la base 7

4384voto

Rob Hruska Points 39151
String myString = "1234";
int foo = Integer.parseInt(myString);

Si vous regardez le Documentation Java vous remarquerez que le "catch" est que cette fonction peut lancer un NumberFormatException , ce que vous pouvez faire :

int foo;
try {
   foo = Integer.parseInt(myString);
}
catch (NumberFormatException e) {
   foo = 0;
}

(Ce traitement renvoie par défaut un nombre malformé à la valeur 0 mais vous pouvez faire autre chose si vous le souhaitez).

Vous pouvez également utiliser un Ints de la bibliothèque Guava, qui, en combinaison avec la méthode Optional est un moyen puissant et concis de convertir une chaîne de caractères en un nombre entier :

import com.google.common.primitives.Ints;

int foo = Optional.ofNullable(myString)
 .map(Ints::tryParse)
 .orElse(0)

40 votes

En plus d'attraper une NumberFormatException, l'utilisateur doit également faire attention à la longueur des chaînes qu'il passe ; si elles sont suffisamment longues pour faire déborder un entier, il peut envisager d'utiliser Long::parseLong à la place.

0 votes

Il fonctionne parfaitement. Je vous remercie de votre attention.

745voto

smas Points 8299

Par exemple, voici deux façons de procéder :

Integer x = Integer.valueOf(str);
// or
int y = Integer.parseInt(str);

Il existe une légère différence entre ces deux méthodes :

  • valueOf renvoie une instance nouvelle ou mise en cache de java.lang.Integer
  • parseInt renvoie des données primitives int .

Il en va de même pour tous les cas : Short.valueOf / parseShort , Long.valueOf / parseLong , etc.

82 votes

Pour les différences entre les deux méthodes, voir cette question

21 votes

valueOf est simplement return valueOf(parseInt(string));

264voto

Ali Akdurak Points 734

Un point très important à prendre en compte est que l'analyseur Integer lance NumberFormatException comme indiqué dans Javadoc .

int foo;
String StringThatCouldBeANumberOrNot = "26263Hello"; //will throw exception
String StringThatCouldBeANumberOrNot2 = "26263"; //will not throw exception
try {
      foo = Integer.parseInt(StringThatCouldBeANumberOrNot);
} catch (NumberFormatException e) {
      //Will Throw exception!
      //do something! anything to handle the exception.
}

try {
      foo = Integer.parseInt(StringThatCouldBeANumberOrNot2);
} catch (NumberFormatException e) {
      //No problem this time, but still it is good practice to care about exceptions.
      //Never trust user input :)
      //Do something! Anything to handle the exception.
}

Il est important de gérer cette exception lorsque l'on essaie d'obtenir des valeurs entières à partir d'arguments fractionnés ou lorsque l'on analyse dynamiquement quelque chose.

0 votes

Comment analyser "26263Hello" ? Je veux extraire 26263 dans ce cas.

1 votes

@user463035818 - Voir docs.oracle.com/javase/8/docs/api/java/util/regex/ - un modèle d'expression régulière de "([0-9]+)" capturera la première séquence d'un ou plusieurs chiffres de un à neuf. Observez la Matcher de ce paquet.

90voto

Billz Points 605

Faites-le manuellement :

public static int strToInt(String str){
    int i = 0;
    int num = 0;
    boolean isNeg = false;

    // Check for negative sign; if it's there, set the isNeg flag
    if (str.charAt(0) == '-') {
        isNeg = true;
        i = 1;
    }

    // Process each character of the string;
    while( i < str.length()) {
        num *= 10;
        num += str.charAt(i++) - '0'; // Minus the ASCII code of '0' to get the value of the charAt(i++).
    }

    if (isNeg)
        num = -num;
    return num;
}

26 votes

Que se passe-t-il si l'entrée est supérieure à 2^32 ? Que se passe-t-il si l'entrée contient des caractères non numériques ?

95 votes

L'une des choses qu'un programmeur doit apprendre dès son entrée sur le marché du travail, si ce n'est avant, est de ne jamais réinventer la roue. C'est peut-être un exercice amusant, mais ne vous attendez pas à ce que votre code passe la revue de code si vous faites ce genre de choses dans un cadre commercial.

0 votes

@yohm il s'agit de cas particuliers ; vous pouvez les traiter avec long et quelques regex ; cependant, d'ici là, vous pouvez utiliser parseInt.

53voto

Adi Mor Points 914

Pour convertir une chaîne de caractères en un int, utilisez :

String str = "1234";
int num = Integer.parseInt(str);

Pour convertir un nombre en une chaîne de caractères, utilisez :

int num = 1234;   
String str = String.valueOf(num);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X