Un extrait de conférence avec un mentor dans le cadre du cours Codegym University. Inscrivez-vous au cours complet.
"Salut, Amigo ! Aujourd'hui, nous allons analyser quelques scénarios plus courants impliquant de travailler avec des chaînes. Par exemple, savez-vous comment diviser une chaîne en plusieurs parties ?"
« Je ne vais pas te le dire tout de suite, Ellie. Mais tu vas me le dire, n'est-ce pas ?
split()
méthode
"Il y a plusieurs façons de procéder. La première façon de diviser une chaîne en plusieurs parties est d'utiliser la split()
méthode. Une expression régulière qui définit une chaîne de délimitation spéciale doit être passée en paramètre. Vous apprendrez ce qu'est une expression régulière dans la quête Collections Java .
Exemple:
Code | Résultat |
---|---|
|
Le résultat sera un tableau de trois chaînes :
|
Simple, mais parfois cette approche est excessive. S'il y a beaucoup de délimiteurs (par exemple, des espaces, des sauts de ligne, des tabulations, des points), alors vous devez construire une expression régulière plutôt complexe."
"Eh bien, bien sûr. Et si c'est difficile à lire, alors il est difficile d'apporter des modifications.
StringTokenizer
classe
Un extrait de conférence avec un mentor dans le cadre du cours Codegym University. Inscrivez-vous au cours complet.
"Java a une classe spéciale dont le travail consiste à diviser une chaîne en sous-chaînes.
"Cette classe n'utilise pas d'expressions régulières : à la place, vous transmettez simplement une chaîne composée de délimiteurs. L'avantage de cette approche est qu'elle ne divise pas la chaîne entière en morceaux d'un seul coup, mais se déplace plutôt du début à la fin. étape à la fois.
La classe a un constructeur et deux méthodes. Nous passons au constructeur une chaîne que nous divisons en parties et une chaîne composée d'un ensemble de caractères de délimitation.
Méthodes | Description |
---|---|
|
Renvoie la sous-chaîne suivante |
|
Vérifie s'il existe d'autres sous-chaînes. |
"Cette classe me rappelle en quelque sorte la classe Scanner, qui a aussi des méthodes nextLine()
et hashNextLine()
.
"C'est une bonne observation que vous avez faite. Vous pouvez créer un StringTokenizer
objet avec cette commande :
StringTokenizer name = new StringTokenizer(string, delimiters);
Où chaîne est la chaîne à diviser en parties. Et délimiteurs est une chaîne, et chaque caractère qu'il contient est traité comme un délimiteur. Exemple:
Code | Sortie console |
---|---|
|
|
"Notez que chaque caractère de la chaîne passée dans la deuxième chaîne au StringTokenizer
constructeur est considéré comme un séparateur.
String.format()
méthode et StringFormatter
classe
"Une autre méthode intéressante de la classe String est format()
.
"Supposons que vous ayez diverses variables stockant des données. Comment les affichez-vous à l'écran sur une seule ligne ? Par exemple, nous avons des données (colonne de gauche) et la sortie souhaitée (colonne de droite) :
Code | Sortie console |
---|---|
|
|
Le code d'un tel programme ressemblera à ceci :
Code programme |
---|
|
« Vous conviendrez avec moi que le code n'est pas très lisible. Et si les noms des variables étaient plus longs, alors le code deviendrait encore plus difficile :
Code programme |
---|
|
"Oui, c'est une lecture difficile !"
"Ne vous inquiétez pas. C'est une situation courante dans les programmes du monde réel, donc je veux vous parler d'un moyen d'écrire ce code plus simplement et de manière plus concise.
String.format
"La String
classe a une méthode statiqueformat()
: elle permet de spécifier un modèle pour assembler une chaîne avec des données. L'apparence générale de la commande est la suivante :
String name = String.format(pattern, parameters);
Exemple:
Code | Résultat |
---|---|
|
|
|
|
|
|
"Le format()
premier paramètre de la méthode est une chaîne de format qui contient tout le texte souhaité ainsi que des caractères spéciaux appelés spécificateurs de format (tels que %d
et %s
) aux endroits où vous devez insérer des données.
"La format()
méthode remplace ces spécificateurs de format %s
et %d
par les paramètres qui suivent la chaîne de format dans la liste de paramètres. Si nous voulons insérer une chaîne, nous écrivons . %s
Si nous voulons insérer un nombre, le spécificateur de format est %d
. Exemple :
Code | Résultat |
---|---|
|
s est égal à"a=1, b=4, c=3" |
"Voici une courte liste de spécificateurs de format pouvant être utilisés dans la chaîne de format :
Prescripteur | Signification |
---|---|
|
String |
|
nombre entier : byte , short , int ,long |
|
nombre réel : float ,double |
|
boolean |
|
char |
|
Date |
|
% personnage |
"Ces spécificateurs indiquent le type de données, mais il existe également des spécificateurs qui indiquent l'ordre des données. Pour obtenir un argument par son numéro (la numérotation commence à partir de un), il faut écrire " % 1$ d " au lieu de " %d ". Exemple :
Code | Résultat |
---|---|
|
s est égal à"a=13, b=12, c=11" |
%3$d
obtiendra le 3ème argument, %2$d
obtiendra le deuxième argument et %d
obtiendra le tout premier argument. Les spécificateurs de format %s
et %d
font référence à des arguments indépendamment des spécificateurs tels que %3$d
ou%2$s
Piscine à cordes
"Chaque chaîne spécifiée dans le code en tant que littéral de chaîne est stockée dans une zone de mémoire appelée pendant l' StringPool
exécution du programme. StringPool
est un tableau spécial pour stocker les chaînes. Son but est d'optimiser le stockage des chaînes :
"Tout d'abord, les chaînes spécifiées dans le code doivent être stockées quelque part, n'est-ce pas ? Le code se compose de commandes, mais les données (en particulier les grandes chaînes) doivent être stockées en mémoire séparément du code. Seules les références aux objets chaîne apparaissent dans le code.
"Deuxièmement, tous les littéraux de chaîne identiques ne doivent être stockés en mémoire qu'une seule fois. Et c'est ainsi que cela fonctionne. Lorsque votre code de classe est chargé par la machine Java, tous les littéraux de chaîne sont ajoutés au s'ils n'y sont pas déjà. S'ils le StringPool
sont déjà là, alors nous utilisons simplement une référence de chaîne à partir du fichier StringPool
.
Ainsi, si vous affectez le même littéral à plusieurs variables String dans votre code, alors ces variables contiendront la même référence. Un littéral ne sera ajouté qu'une StringPool
seule fois. Dans tous les autres cas, le code obtiendra une référence à la chaîne déjà chargée dans le fichier StringPool
.
Voici en gros comment ça marche :
Code | Travailler avec StringPoll |
---|---|
|
|
"C'est pourquoi les variables a
et b
stockeront les mêmes références."
"J'espère que j'ai bien tout compris.
intern()
méthode.
"Et la meilleure partie est que vous pouvez ajouter par programmation n'importe quelle chaîne au StringPool
. Pour ce faire, il vous suffit d'appeler la méthode String
de la variable intern()
.
"La intern()
méthode ajoutera la chaîne au StringPool
si elle n'y est pas déjà et renverra une référence à la chaîne dans le StringPool
.
"Et que se passera-t-il si deux chaînes identiques sont ajoutées à l' StringPool
aide de la intern()
méthode ?"
"La méthode renverra les mêmes références. Cela peut être utilisé pour comparer des chaînes par référence. Exemple :
Code | Note |
---|---|
|
|
|
|
Il est peu probable que vous utilisiez souvent cette méthode. Cela dit, les gens aiment poser des questions à ce sujet lors des entretiens d'embauche.
"Donc, il vaut mieux le savoir que de ne pas le savoir. Merci, Ellie!"
GO TO FULL VERSION