Voici le problème. Ce code:
String a = "0000";
System.out.println(a);
char[] b = a.toCharArray();
System.out.println(b);
retour
0000 0000
Mais ce code:
String a = "0000";
System.out.println("String a: " + a);
char[] b = a.toCharArray();
System.out.println("char[] b: " + b);
retour
Chaîne a: 0000 Char [] b: [C @ 56e5b723
Que se passe-t-il dans le monde? Semble qu'il devrait y avoir une solution assez simple, mais je n'arrive pas à le comprendre.
Quand tu dis
System.out.println(b);
Il en résulte un appel à print(char[] s)
puis println()
Le JavaDoc pour print(char[] s)
dit:
Imprimez un tableau de caractères. Les caractères sont convertis en octets conformément au codage de caractères par défaut de la plate-forme, et ces octets sont écrits exactement à la manière de la méthode write (int).
Il effectue donc une impression octet par octet.
Quand tu dis
System.out.println("char[] b: " + b);
Il en résulte un appel à print(String)
, et donc ce que vous faites réellement est d'ajouter à un String
un Object
qui invoque toString()
sur le Object
- comme pour tous les Object
par défaut, et dans le cas d'un Array
, imprime la valeur de la référence (l'adresse mémoire).
Vous pourriez faire:
System.out.println("char[] b: " + new String(b));
Notez que c'est "faux" dans le sens où vous ne faites pas attention à l'encodage et utilisez la valeur par défaut du système. Apprenez à coder le plus tôt possible.
System.out.println("char[] b: " + b);
C'est comme
System.out.println(("char[] b: " + b.toString());
Vous pouvez rechercher "Object.toString ()"
Utilisation
System.out.println("char[] b: " + Arrays.toString(b));
Le gibrish que vous obtenez est le nom de la classe suivi de l'adresse mémoire de l'objet. Un problème se produit lorsque vous essayez d'ajouter b avec une chaîne char[] b:
dans ce cas, la méthode char array b.toString () est appelée ainsi [C @ 56e5b723 est imprimé.
[indique qu'il s'agit d'un tableau C indique la classe dans ce cas char @ 56e5b723 indique l'emplacement de la mémoire
La méthode toString()
d'un tableau (qui est appelée lorsque vous faites "..." + b
) Est uniquement destinée à fournir une sortie de débogage. Il n'y a pas de cas particulier où la toString()
d'une char[]
Vous donnera la chaîne d'origine - les tableaux de tous les types ont la même implémentation toString()
.
Si vous souhaitez obtenir la chaîne d'origine du tableau char, utilisez:
String a2 = new String(b);
Utilisez la ligne 3: e!
Scanner input = new Scanner(System.in);
char[] txt = input.next().toCharArray();
System.out.println((char[])txt);