Fonctionnement interne des chaînes et méthode de sous-chaîne - 1

« Salut Amigo ! »

"Salut, Ellie."

"Je vais vous parler des sous-chaînes. Une sous-chaîne fait partie d'une chaîne. Et l'opération la plus courante effectuée sur les chaînes (après avoir combiné plusieurs chaînes ensemble) consiste à obtenir une sous-chaîne."

7) Comment obtenir une partie d'une chaîne ?

"La méthode de sous-chaîne renvoie une partie d'une chaîne. Cette méthode a deux versions."

"La première version renvoie la sous-chaîne spécifiée par les indices de début et de fin. Mais le caractère à l'index de fin n'est pas inclus ! Si vous transmettez les chiffres 1 et 3, la sous-chaîne ne contiendra que les deuxième et troisième caractères (rappelez-vous que les indices commencent avec 0)."

"La deuxième version renvoie la sous-chaîne à partir de l'index passé jusqu'à la fin de la chaîne."

Méthode(s) Exemples)
String substring(int beginIndex, int endIndex)
String s = "Good news, everyone!";
s = s.substring(1,6);
Résultat:

s == "ood n";
String substring(int beginIndex)
String s = "Good news, everyone!";
s = s.substring(1);

"C'est assez simple. Merci, Ellie."

"Je vais également vous expliquer le fonctionnement interne des objets String."

"Comme vous le savez probablement déjà, String est une classe immuable. Et quels avantages cela nous donne-t-il ? En l'occurrence, l'un des principaux avantages est la possibilité d'obtenir une sous-chaîne. Mais tout d'abord."

"En interne, un objet String contient un tableau de caractères, ce qui n'est pas si difficile à deviner. Mais il stocke également deux variables supplémentaires : l'index du premier caractère du tableau et le nombre de caractères. Maintenant, je vais vous dire ce que ces sont utilisés pour."

"Lorsque nous créons une sous-chaîne à l'aide de la méthode substring , un nouvel objet String est créé."

"Mais, au lieu de stocker une référence à un nouveau tableau de caractères, l'objet stocke une référence à l'ancien tableau ainsi que deux variables qu'il utilise pour déterminer la partie du tableau de caractères d'origine qui lui est associée."

"Je n'ai rien compris à tout ça."

"Lorsqu'une sous-chaîne est créée, le tableau de caractères n'est pas copié dans le nouvel objet String. Au lieu de cela, les deux objets stockent une référence au tableau de caractères d'origine. Mais ! Le deuxième objet stocke également deux variables : son index de départ dans le tableau et le nombre de caractères appartenant à la sous-chaîne."

"Vérifiez-le:"

Obtenir une sous-chaîne Ce qui est stocké dans la sous-chaîne
String s = "mama";
Ce qui est stocké dans s :

char[] value = {'m','a','m','a'};
offset = 0;
count = 4;
String s2 = s.substring(1);
Ce qui est stocké dans s2 :

char[] value = {'m','a','m','a'};
offset = 1;
count = 3;
String s3 = s.substring(1, 3);
Ce qui est stocké dans s3 :

char[] value = {'m','a','m','a'};
offset = 1;
count = 2;

"Les trois chaînes stockent une référence au même tableau de caractères, mais elles stockent également l'index des premier et dernier caractères qui les concernent. Ou plus précisément, l'index du premier caractère et le nombre de caractères."

"Cela a du sens maintenant."

"Donc, si vous prenez une chaîne de 10 000 caractères et que vous créez 10 000 sous-chaînes de n'importe quelle longueur, ces sous-chaînes utiliseront très peu de mémoire, car le tableau de caractères n'est pas dupliqué. Ces chaînes, que vous vous attendez à utiliser beaucoup d'espace, ne prendra littéralement que quelques octets."

"Cool!"

"Mais pourriez-vous faire cela si vous pouviez modifier Strings ?"

"Non, quelqu'un pourrait changer la première chaîne, puis toutes ses sous-chaînes changeraient également. Maintenant, il est logique de comprendre pourquoi ils ont fait cela. C'est une solution vraiment cool."

"Je suis heureux que vous ayez aimé."