Généralement dans un interface utilisateur graphique, certains champs de texte s'attendent à ce que l'utilisateur saisisse une valeur numérique. Cette valeur numérique se retrouvera dans un Chaîne objet qui n'aide pas vraiment votre programme si vous voulez faire de l'arithmétique. Heureusement, il existe des classes wrapper qui fournissent des méthodes pour convertir ces valeurs String en nombres et la classe String a une méthode pour les reconvertir.
Classes Wrapper
le types de données primitifs qui traitent des nombres (c'est-à-dire, octet, entier, double, flottant, long et court) ont tous des équivalents de classe. Ces classes sont appelées classes wrapper car elles prennent un type de données primitif et l'entourent des fonctionnalités d'une classe. Par exemple, la classe Double aura une valeur double comme données et fournira des méthodes pour manipuler cette valeur.
Toutes ces classes wrapper ont une méthode appelée valueOf. Cette méthode prend une chaîne comme argument et renvoie une instance de la classe wrapper. Par exemple, supposons que nous ayons une chaîne de valeur dix:
Numéro de chaîne = "10";
Avoir ce nombre en tant que chaîne ne nous est pas utile, nous utilisons donc la classe Integer pour le convertir en un objet Integer:
Entier convertNumber = Integer.valueOf (nombre);
Maintenant, le nombre peut être utilisé comme un nombre et non comme une chaîne:
nombre converti = nombre converti + 20;
Vous pouvez également faire passer directement la conversion à un type de données primitif:
int convertNumber = Integer.valueOf (number) .intValue ();
Pour les autres types de données primitifs, vous insérez simplement dans la classe d'encapsulage correcte: octet, entier, double, flottant, long court.
Remarque: Vous devez vous assurer que la chaîne peut être analysée dans le type de données approprié. Si ce n'est pas le cas, vous vous retrouverez avec une erreur d'exécution. Par exemple, en essayant de convertir "dix" en un entier:
Numéro de chaîne = "dix";
int convertNumber = Integer.valueOf (number) .intValue ();
produira une exception NumberFormatException car le compilateur n'a aucune idée que "dix" est supposé être 10.
Plus subtilement, la même erreur se produira si vous oubliez qu'un 'int' ne peut contenir que des nombres entiers:
Numéro de chaîne = "10,5";
int convertNumber = Integer.valueOf (number) .intValue ();
Le compilateur ne tronquera pas le nombre, il pensera simplement qu'il ne rentre pas dans un 'int' et qu'il est temps de lever une NumberFormatException.
Conversion de nombres en chaînes
Pour transformer un nombre en une chaîne suit le même type de modèle que la classe chaîne a également une méthode valueOf. Il peut prendre n'importe quel numéro de type de données primitif comme argument et produire une chaîne:
int nombreVingt = 20;
Chaîne convertie = String.valueOf (numberTwenty);
qui met "20" comme valeur de chaîne de converti.
ou vous pouvez utiliser la méthode toString de n'importe quelle classe wrapper:
Chaîne convertie = Integer.toString (numberTwenty);
La méthode toString est commune à tous les types d'objets. La plupart du temps, ce n'est qu'une description de l'objet. Pour les classes wrapper, cette description est la valeur réelle qu'elles contiennent. Dans ce sens, la conversion est un peu plus robuste. Si la classe Double devait être utilisée à la place de l'entier:
Chaîne convertie = Double.toString (numberTwenty);
le résultat ne provoquerait pas de erreur d'exécution. La variable convertie contiendrait la chaîne "20.0".
Il existe également un moyen plus subtil de convertir des nombres lorsque vous êtes concaténation de chaînes. Si une chaîne devait être construite comme:
String aboutDog = "Mon chien a" + numberTwenty + "ans.";
la conversion du nombre entier Vingt se fait automatiquement.