Récupère la chaîne de caractères par index – Java

Je sais comment calculer l’indice d’un certain caractère ou nombre dans une chaîne, mais existe-t-il une méthode prédéfinie que je peux utiliser pour me donner le personnage à la nième position? Donc, dans la chaîne “foo”, si je demandais le caractère d’index 0, il renverrait “f”.

Note – dans la question ci-dessus, par “caractère” je ne veux pas dire le type de données char, mais une lettre ou un chiffre dans une chaîne. La chose importante ici est que je ne reçois pas de caractère lorsque la méthode est invoquée, mais une chaîne (de longueur 1). Et je connais la méthode subssortingng (), mais je me demandais s’il y avait une manière plus simple.

La méthode que vous recherchez est la charAt . Voici un exemple:

 Ssortingng text = "foo"; char a_char = text.charAt(0); System.out.println(a_char); // Prints f 

Pour plus d’informations, consultez la documentation Java sur Ssortingng.charAt . Si vous voulez un autre tutoriel simple, celui-ci ou celui-ci .

Si vous ne voulez pas que le résultat soit un type de données char , mais plutôt une chaîne, vous utiliseriez la méthode Character.toSsortingng :

 Ssortingng text = "foo"; Ssortingng a_letter = Character.toSsortingng(text.charAt(0)); System.out.println( a_letter ); // Prints f 

Si vous souhaitez plus d’informations sur la classe Character et la méthode toSsortingng , j’ai extrait mes informations de la documentation de Character.toSsortingng .

Vous voulez .charAt()

Voici un tutoriel

 "myssortingng".charAt(2) 

renvoie s

Si vous êtes enthousiaste à l’idée d’avoir une chaîne, vous pouvez convertir un caractère en chaîne de plusieurs manières:

 Ssortingng mychar = Character.toSsortingng("myssortingng".charAt(2)); 

Ou

 Ssortingng mychar = ""+"myssortingng".charAt(2); 

Ou même

 Ssortingng mychar = Ssortingng.valueOf("myssortingng".charAt(2)); 

Par exemple.

Vous êtes plutôt coincé avec la subssortingng() , compte tenu de vos exigences. La méthode standard serait charAt() , mais vous avez dit ne pas accepter de type de données char.

Vous pouvez utiliser le résultat de la méthode Ssortingng.charAt(int index) comme paramètre de Ssortingng.valueOf (char c) .

 Ssortingng.valueOf(mySsortingng.charAt(3)) // This will return a ssortingng of the character on the 3rd position. 

C’est aussi simple que:

 Ssortingng charIs = ssortingng.charAt(index) + ""; 

Une approche hybride combinant la charAt avec votre exigence de ne pas obtenir de char pourrait être

 newssortingng = Ssortingng.valueOf("foo".charAt(0)); 

Mais ce n’est pas vraiment plus simple que la subssortingng() pour être honnête.

Aucune des réponses proposées ne fonctionne pour les paires de substitution utilisées pour encoder des caractères en dehors du plan multiguel de base Unicode .

Voici un exemple d’utilisation de trois techniques différentes pour parcourir les “caractères” d’une chaîne (y compris l’utilisation de l’API de stream Java 8). Veuillez noter que cet exemple inclut des caractères du plan multilingue supplémentaire (SMP) Unicode. Vous avez besoin d’une police correcte pour afficher cet exemple et le résultat correctement.

 // Ssortingng containing characters of the Unicode // Supplementary Multilingual Plane (SMP) // In that particular case, hieroglyphs. Ssortingng str = "The quick brown 𓃥 jumps over the lazy 𓊃𓍿𓅓𓃡"; 

Itérer des caractères

La première solution est une simple boucle sur tous les caractères de la chaîne:

 /* 1 */ System.out.println( "\n\nUsing char iterator (do not work for surrogate pairs !)"); for (int pos = 0; pos < str.length(); ++pos) { char c = str.charAt(pos); System.out.printf("%s ", Character.toString(c)); // ^^^^^^^^^^^^^^^^^^^^^ // Convert to String as per OP request } 

Itérer des points de code

La deuxième solution utilise également une boucle explicite, mais en accédant à des points de code individuels avec codePointAt et en incrémentant l’indice de boucle en conséquence, vous devez utiliser charCount :

 /* 2 */ System.out.println( "\n\nUsing Java 1.5 codePointAt(works as expected)"); for (int pos = 0; pos < str.length();) { int cp = str.codePointAt(pos); char chars[] = Character.toChars(cp); // ^^^^^^^^^^^^^^^^^^^^^ // Convert to a `char[]` // as code points outside the Unicode BMP // will map to more than one Java `char` System.out.printf("%s ", new String(chars)); // ^^^^^^^^^^^^^^^^^ // Convert to String as per OP request pos += Character.charCount(cp); // ^^^^^^^^^^^^^^^^^^^^^^^ // Increment pos by 1 of more depending // the number of Java `char` required to // encode that particular codepoint. } 

Itérer sur les points de code en utilisant l'API Stream

La troisième solution est fondamentalement la même que la seconde, mais en utilisant l’ API Java 8 Stream :

 /* 3 */ System.out.println( "\n\nUsing Java 8 stream (works as expected)"); str.codePoints().forEach( cp -> { char chars[] = Character.toChars(cp); // ^^^^^^^^^^^^^^^^^^^^^ // Convert to a `char[]` // as code points outside the Unicode BMP // will map to more than one Java `char` System.out.printf("%s ", new Ssortingng(chars)); // ^^^^^^^^^^^^^^^^^ // Convert to Ssortingng as per OP request }); 

Résultats

Lorsque vous exécutez ce programme de test, vous obtenez:

 Using char iterator (do not work for surrogate pairs !) T hequickbrown ? ? jumpsoverthelazy ? ? ? ? ? ? ? ? Using Java 1.5 codePointAt(works as expected) T hequickbrown 𓃥 jumpsoverthelazy 𓊃 𓍿 𓅓 𓃡 Using Java 8 stream (works as expected) T hequickbrown 𓃥 jumpsoverthelazy 𓊃 𓍿 𓅓 𓃡 

Comme vous pouvez le voir (si vous pouvez afficher correctement les hiéroglyphes), la première solution ne gère pas correctement les caractères en dehors du BMP Unicode. Par contre, les deux autres solutions traitent bien les paires de substitution.

Voici le code correct. Si vous utilisez des zybooks, cela répondra à tous les problèmes.

 for (int i = 0; i 

Comme ça:

 Ssortingng a ="hh1hhhhhhhh"; char s = a.charAt(3);