Comment convertir un caractère en chaîne dans Java (Exemples)
⚡ Résumé intelligent
Conversion d'un char en chaîne de caractères dans Java Il suffit d'appeler String.valueOf(myChar) ou Character.toString(myChar). Pour effectuer le déplacement inverse, on utilise charAt(index), qui extrait un caractère d'une chaîne en fonction de sa position.
Dans ce tutoriel, nous allons étudier deux courts programmes qui déplacent une valeur entre les deux voies. Java stocke le texte :
- Convertir un caractère en chaîne de caractères
- Convertir une chaîne de caractères en char
Ces deux types ne sont pas interchangeables. Un char est un type primitif qui contient exactement une unité de code UTF-16 de 16 bits, écrite entre guillemets simples comme 'g'. Une chaîne de caractères est un objet qui contient une séquence de ces unités de code, écrite entre guillemets doubles comme « »Guru99". Comme l'un est un type primitif et l'autre un objet, aucune conversion ne peut les relier ; une méthode de bibliothèque doit effectuer le travail. Java fournit un exemplaire pour chaque direction.
Convertir un caractère en chaîne
Il existe plusieurs façons de convertir un char en String. JavaEn interne a Java La chaîne stocke son texte Un caractère est un type de données non signé de 16 bits, occupant deux octets et pouvant contenir des valeurs comprises entre 0 et 65 535.
On peut convertir un caractère (char) en chaîne de caractères (String) grâce à deux méthodes : la méthode statique `toString()` de la classe `Character` et la méthode statique `valueOf()` de la classe `String`. Toutes deux renvoient une nouvelle chaîne de caractères d'un seul caractère, et les deux programmes ci-dessous affichent le même résultat.
Méthode 1 : Utilisation de la méthode toString()
Le programme ci-dessous stocke la lettre g dans un variable de caractère et le transmet à Character.toString(), qui renvoie ce caractère unique sous forme de chaîne de caractères. Le code est modifiable ; changez la lettre et exécutez-le à nouveau pour observer le résultat.
public class CharToString_toString {
public static void main(String[] args) {
//input character variable
char myChar = 'g';
//Using toString() method
//toString method take character parameter and convert string.
String myStr = Character.toString(myChar);
//print string value
System.out.println("String is: " + myStr);
}
}
Production attendue :
String is: g
Méthode 2 : Utilisation de la méthode valueOf()
Le deuxième programme remplace String.valueOf(myChar) et ne change rien d'autre. Java 9 Les deux appels correspondent à la même opération : Character.toString(char) est implémenté comme un appel à String.valueOf(char), donc aucun des deux n’est sensiblement plus rapide que l’autre.
public class CharToString_valueOf {
public static void main(String[] args) {
char myChar = 'g';
//valueOf method take character parameter and convert string.
String myStr = String.valueOf(myChar);
////print string value
System.out.println("String is: " + myStr);
}
}
Production attendue :
String is: g
Autres méthodes pour convertir un caractère en chaîne de caractères
Quatre autres méthodes apparaissent dans du code plus ancien et dans des questions d'entretien. Elles fonctionnent toutes, mais aucune n'est aussi claire que les deux méthodes précédentes, et deux d'entre elles allouent plus de mémoire que nécessaire.
public class CharToStringMore { public static void main(String[] args) { char myChar = 'g'; // 1. concatenation with an empty literal String byConcat = myChar + ""; // 2. the Character wrapper instance method String byWrapper = Character.valueOf(myChar).toString(); // 3. a one-element array of code units String byArray = new String(new char[]{myChar}); // 4. the format() helper with the %c conversion String byFormat = String.format("%c", myChar); System.out.println(byConcat + byWrapper + byArray + byFormat); } }
Production attendue:
gggg
Le tableau indique dans quelles situations chaque itinéraire est avantageux.
| Méthode | Exemple | Remarques |
|---|---|---|
| Chaîne.valeurDe(caractère) | Chaîne.valeurDe(monCaractère) | Recommandé. Un seul appel, aucun objet supplémentaire au-delà de la chaîne de caractères renvoyée. |
| Caractère.toString(char) | Personnage.toString(monPersonnage) | Tout aussi bon. Disponible depuis Java 1.4 et délègue à String.valueOf depuis Java 9. |
| Enchaînement | myChar + "" | Œuvres, et sur Java À partir de la version 9, la compilation génère un appel à invokedynamic plutôt qu'à StringBuilder ; l'ancien avertissement concernant la lenteur n'est donc plus valable. L'intention reste cependant masquée. |
| enveloppe de personnage | Caractère.valeurDe(monCaractère).toString() | BoxUtilisez d'abord le caractère. Utilisez Character.valueOf, et non le nouveau constructeur Character(char), qui est obsolète et sera supprimé depuis Java 9. |
| tableau de caractères | nouvelle chaîne(nouveau char[]{myChar}) | Alloue un tableau et le copie. À réserver au cas où vous possédez déjà un tableau de caractères. |
| Chaîne.format | Chaîne.format("%c", myChar) | De loin la plus lente, car la chaîne de format est analysée à l'exécution. Utile uniquement lorsque le caractère fait partie d'un modèle plus large. |
Les deux sens de la conversion d'un seul caractère étant couverts, l'opération inverse est la suivante.
Convertir une chaîne en caractère
On peut convertir une chaîne de caractères en char à l'aide de la méthode charAt() de la classe String. Cette méthode prend un index (à partir de zéro) et renvoie le char situé à cette position. Lire chaque caractère signifie donc… looping De 0 à length() moins un. Toute tentative d'index inférieur à 0 ou égal à length() et supérieur lève une exception StringIndexOutOfBoundsException.
Le programme ci-dessous parcourt la chaîne Guru99 une position à la fois et imprime chaque caractère avec son index.
//Convert String to Character using string method
package com.guru99;
public class StringToChar {
public static void main(String[] args)
{
//input String
String myStr = "Guru99";
//find string length using length method.
int stringLength =myStr.length();
//for loop start 0 to total length
for(int i=0; i < stringLength;i++)
{
//chatAt method find Position and convert to character.
char myChar = myStr.charAt(i);
//print string to character
System.out.println("Character at "+i+" Position: "+myChar);
}
}
}
Production attendue:
Character at 0 Position: G Character at 1 Position: u Character at 2 Position: r Character at 3 Position: u Character at 4 Position: 9 Character at 5 Position: 9
Notez qu'on ne peut pas convertir directement une chaîne de caractères : `char c = (char) myStr;` ne compile pas, car une chaîne est un objet et un caractère est un type primitif. Pour une chaîne contenant exactement un caractère, `charAt(0)` est la solution complète.
Convertir une chaîne de caractères en tableau de caractères et inversement.
Lorsque tous les caractères sont nécessaires simultanément plutôt qu'un index à la fois, toCharArray() renvoie un tableau de caractères frais. La reconversion de ce tableau en texte est le rôle du constructeur String(char[]) ou de String.valueOf(char[]), et les deux copient le tableau de manière défensive, de sorte que les modifications ultérieures apportées au tableau n'altèrent pas la chaîne.
public class StringCharArray { public static void main(String[] args) { String myStr = "Guru99"; // the text split into its array of code units char[] chars = myStr.toCharArray(); System.out.println(chars.length); System.out.println(chars[0]); // the array turned back into text System.out.println(new String(chars)); System.out.println(String.valueOf(chars)); // one range copied into an array you already own char[] part = new char[4]; myStr.getChars(0, 4, part, 0); System.out.println(new String(part)); } }
Production attendue:
6 G Guru99 Guru99 Guru
Une quatrième méthode, getChars(srcBegin, srcEnd, dst, dstBegin), copie une plage dans un tableau existant au lieu d'en allouer un nouveau. L'indice de fin est exclusif, c'est pourquoi getChars(0, 4, part, 0) renvoie Guru plutôt que des Guru9. Les limites hors plage lèvent une exception IndexOutOfBoundsException.
Les trois approches diffèrent principalement par ce qu'elles allouent, comme résumé ci-dessous.
| Tâche | Appeler | Ce qu'il alloue |
|---|---|---|
| Tableau de chaînes de caractères | myStr.toCharArray() | Un nouveau tableau ; sans risque sur une chaîne vide, auquel cas il renvoie un tableau de longueur nulle. |
| tableau de caractères converti en chaîne de caractères | nouvelle chaîne(chars) ou chaîne.valueOf(chars) | Une nouvelle chaîne de caractères plus une copie interne du tableau. |
| Insérer une plage dans un tableau existant | myStr.getChars(0, 4, part, 0) | Rien de nouveau ; cela écrit dans le tableau que vous fournissez. |
Erreurs courantes lors de la conversion de char et de string dans Java
La plupart des problèmes rencontrés lors de ces conversions proviennent de six erreurs récurrentes plutôt que des méthodes elles-mêmes. Le tableau associe chaque erreur à sa solution.
| Problème | Causes | Fixer |
|---|---|---|
| Types incompatibles : une chaîne de caractères ne peut pas être convertie en char. | Une tentative de conversion, comme char c = (char) myStr ; | Appelez plutôt myStr.charAt(0). Il n'existe pas de conversion directe entre un objet et un type primitif. |
| Exception StringIndexOutOfBounds | charAt() appelé avec un index négatif, ou avec length() sur une chaîne vide | Utilisez la fonction isEmpty() ou comparez l'index à la longueur() avant de lire. |
| String.valueOf(null) lève une exception NullPointerException | La valeur nulle nue correspond à la surcharge char[], qui est la plus spécifique. | Utilisez String.valueOf((Object) null) lorsque vous souhaitez obtenir le texte littéral null. |
| Character.toString(65) renvoie A, et non 65. | Java La version 11 a ajouté une surcharge de Character.toString(int) qui lit son argument comme un point de code Unicode. | Utilisez String.valueOf(65) ou Integer.toString(65) pour les chiffres 65. |
| Un emoji s'affiche sous forme de deux symboles brouillés | Les caractères supérieurs à U+FFFF occupent deux caractères, un substitut haut suivi d'un substitut bas. | Lisez la valeur avec codePointAt(0), puis reconstruisez-la avec Character.toString(codePoint) sur Java 11 et versions ultérieures. |
| Avertissement de dépréciation concernant le nouveau personnage (myChar) | Le constructeur Character(char) est obsolète depuis Java 9 et marqué pour être retiré | Utilisez Character.valueOf(myChar), ou laissez l'autoboxing fournir le wrapper. |
La même classe String prend en charge de nombreux exercices connexes : inverser une chaîne de caractères avec récursivité, comparer deux chaînes de caractères et impression formatée.
