"Bonjour Amigo !"

« Bonjour, Rishi ! »

"Vous en savez maintenant assez sur les chaînes pour apprendre quelque chose d'intéressant. Plus précisément, une nouvelle classe similaire, mais pas exactement la même, à la classe String."

"Cela semble intrigant, bien que je ne comprenne pas tout à fait comment les chaînes ordinaires sont insuffisantes et pourquoi d'autres classes de type chaîne sont nécessaires."

"Commençons par le fait que les chaînes sont des objets immuables en Java."

« Comment ça ? J'ai oublié... Ou je n'ai jamais su pour commencer... »

"Permettez-moi de vous rappeler que les objets immuables sont ceux dont les états ne peuvent pas être modifiés après leur création."

"Ahhh... Pourquoi les chaînes sont-elles immuables en Java ?"

"Cela a été fait pour rendre la classe String hautement optimisée et pour lui permettre d'être utilisée partout. Par exemple, seuls les types immuables sont recommandés pour être utilisés comme clés dans la collection HashMap .

"Cependant, des situations surviennent souvent où les programmeurs trouveraient plus pratique que la classe String soit modifiable. Ils veulent une classe qui ne crée pas de nouvelle sous-chaîne à chaque fois qu'une de ses méthodes est appelée."

"Mais à quoi ça sert ?"

"Eh bien, supposons que nous ayons une très grande chaîne et que nous devions fréquemment ajouter quelque chose à la fin. Dans ce cas, même une collection de caractères ( ArrayList<Character>) peut être plus efficace que de recréer et de concaténer constamment des objets String."

"Et c'est pourquoi nous avons besoin de chaînes qui ne sont pas tout à fait la classe String ?"

"Exactement. Le langage Java a ajouté un type de type String qui peut être modifié. Il s'appelle StringBuilder".

Création d'un objet

"Pour créer un StringBuilderobjet basé sur une chaîne existante, vous devez exécuter une instruction telle que :

StringBuilder name = new StringBuilder(string);

"Pour créer une chaîne mutable vide, vous devez utiliser une instruction comme celle-ci :

StringBuilder name = new StringBuilder();

Liste des méthodes

"La StringBuilderclasse a deux douzaines de méthodes utiles. Voici les plus importantes :

Méthode Description
StringBuilder append(obj)
Convertit l'objet passé en chaîne et l'ajoute à la chaîne actuelle
StringBuilder insert(int index, obj)
Convertit l'objet passé en chaîne et insère au milieu de la chaîne actuelle
StringBuilder replace(int start, int end, String str)
Remplace la partie de la chaîne spécifiée par l'intervalle début..fin par la chaîne transmise
StringBuilder deleteCharAt(int index)
Supprime le caractère avec l'index spécifié de la chaîne
StringBuilder delete(int start, int end)
Supprime les caractères dans l'intervalle spécifié de la chaîne
int indexOf(String str, int index)
Recherche une sous-chaîne dans la chaîne courante
int lastIndexOf(String str, int index)
Recherche une sous-chaîne dans la chaîne courante, en commençant par la fin
char charAt(int index)
Renvoie le caractère de la chaîne à l'index passé
String substring(int start, int end)
Renvoie la sous-chaîne définie par l'intervalle spécifié
StringBuilder reverse()
Inverse la chaîne actuelle.
void setCharAt(int index, char)
Remplace le caractère à l'index spécifié par le caractère passé
int length()
Renvoie la longueur de la chaîne en caractères

"Et maintenant, je vais vous décrire brièvement chacune de ces méthodes.

Ajout à une chaîne

"Pour ajouter quelque chose à une chaîne mutable ( StringBuilder), utilisez la append()méthode. Exemple :

Code Description
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

Conversion en chaîne standard

"Pour convertir un StringBuilderobjet en objet String, il suffit d'appeler sa toString()méthode. Exemple

Code Sortir
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

Comment supprimer un personnage ?

"Pour supprimer un caractère dans une chaîne mutable, vous devez utiliser la deleteCharAt()méthode. Exemple :

Code Sortir
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Helo

Comment remplacer une partie d'une chaîne par une autre chaîne ?

« Pour cela il y a la replace(int begin, int end, String str)méthode. Exemple :

Code Sortir
StringBuilder builder = new StringBuilder("Mellow");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
MeHello!w

"Ça a l'air pratique. Merci, Rishi."

"N'en parle pas. Que diriez-vous de ça, pouvez-vous retourner une corde à l'envers ? Comment feriez-vous ?"

"Eh bien... je créerais un StringBuilder, y mettrais une chaîne... Puis créerais une nouvelle chaîne, et dans une boucle du dernier caractère au premier... Ou peut-être un décalage au niveau du bit...

"Pas mal. Mais cela pourrait être plus rapide. Il existe une méthode spéciale pour le faire - reverse();Exemple :

Code Sortir
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

"Outre la StringBuilderclasse, Java a une autre classe de type chaîne appelée StringBuffer. C'est un analogue de la StringBuilderclasse, mais ses méthodes sont marquées avec le synchronizedmodificateur."

"Qu'est-ce que cela signifie?"

"Cela signifie que l' StringBufferobjet est accessible simultanément à partir de plusieurs threads."

"Je ne suis pas encore très familier avec les threads. Mais 'accessible à partir de plusieurs threads' est clairement meilleur que 'impossible à accéder à partir de plusieurs threads'... Pourquoi ne pas toujours utiliser StringBufferalors ?"

"Parce qu'il est beaucoup plus lent que StringBuilder. Vous aurez peut-être besoin d'une telle classe lorsque vous commencerez à explorer activement le multithreading dans la quête Java Multithreading .

"J'écrirai ça dans ma mémoire pour ne pas oublier. Marqué "pour l'avenir".