Manipulation de chaînes de caractères

10-Java SE Manipulation de chaines de caractères

Bienvenue dans ce tutoriel sur la manipulation de chaînes de caractères en Java ! Les chaînes de caractères sont des éléments fondamentaux dans le développement logiciel, utilisées pour représenter et manipuler du texte. Dans ce guide, nous explorerons les différentes techniques et méthodes offertes par Java pour travailler efficacement avec des chaînes.

accès rapide

Introduction aux Chaînes de Caractères

La démo:

1. Qu’est-ce qu’une String en Java ?

En Java, une String est une séquence de caractères. Elle est utilisée pour stocker et manipuler du texte. La classe String fait partie du package java.lang, ce qui signifie qu’elle est automatiquement importée dans tous les programmes Java. Les chaînes de caractères sont très couramment utilisées, et Java offre une riche bibliothèque de méthodes pour les manipuler.

Exemple de déclaration de String :
String message;
Découvrons encore plus :

En Java, une chaîne de caractères est représentée par le type java.lang.String. La déclaration d’une chaîne se fait en utilisant le mot-clé String, suivi du nom de la variable. Voici un exemple de déclaration de chaînes :

java.lang.String firstName;
java.lang.String lastName;
2. Déclaration et Initialisation des Strings

Il existe plusieurs façons de déclarer et initialiser des Strings en Java :

2.1. Littéral de chaîne :

String message = "Hello, Java!";

2.2. Utilisation du mot-clé new :

String message = new String("Hello, Java!");

2.3. À partir d’un tableau de caractères :

char[] helloArray = { 'H', 'e', 'l', 'l', 'o', '!' };
String helloString = new String(helloArray);
3. Immutabilité des Strings

Une caractéristique clé des Strings en Java est leur immutabilité. Une fois qu’une String est créée, elle ne peut pas être modifiée. Toute opération qui semble modifier une String crée en réalité une nouvelle chaîne.

Exemple d’immutabilité :
public class StringImmutability {
    public static void main(String[] args) {
        String original = "Hello";
        String modified = original.concat(", World!");

        System.out.println("Original String: " + original); // Affiche "Hello"
        System.out.println("Modified String: " + modified); // Affiche "Hello, World!"
    }
}

Dans cet exemple, la chaîne original reste inchangée après l’opération concat.

Opérations de Base sur les Chaînes de Caractères

La démo :

1. Concaténation :

La concaténation de chaînes consiste à joindre deux ou plusieurs chaînes pour former une seule chaîne. En Java, il existe plusieurs méthodes pour concaténer des chaînes de caractères.

1.1 Utilisation de l’Opérateur +

L’opérateur + peut être utilisé pour concaténer des chaînes de caractères. Lorsque l’opérateur + est utilisé entre des chaînes de caractères, Java les concatène pour former une seule chaîne.

String prenom = "John";
String nom = "Doe";
String nomComplet = prenom + " " + nom;
System.out.println("Nom complet : " + nomComplet);
Explication :
  • +: L’opérateur + est utilisé pour concaténer (joindre) plusieurs chaînes.
  • Résultat : La sortie affichera « Nom complet : John Doe », montrant que les chaînes « John » et « Doe » ont été concaténées pour former le nom complet.
1.2 Utilisation de la Méthode concat()

La méthode concat() de la classe String peut également être utilisée pour concaténer des chaînes de caractères. Elle prend en argument une autre chaîne à concaténer avec la chaîne d’origine.

String str1 = "Bonjour";
String str2 = " le monde";
String result = str1.concat(str2); // "Bonjour le monde"
Comparaison entre l’Opérateur + et la Méthode concat()
  1. Facilité d’utilisation : L’opérateur + est simple à comprendre et à utiliser.
  2. Polyvalence : En plus de concaténer des chaînes de caractères, il peut être utilisé pour concaténer d’autres types de données, ce qui rend le code plus lisible dans certains cas.
  1. Performance : L’opérateur + crée souvent des objets temporaires lors de la concaténation de chaînes de caractères, ce qui peut affecter les performances, surtout lorsqu’il est utilisé dans des boucles ou dans des applications nécessitant beaucoup de manipulations de chaînes.
  1. Performance : La méthode concat() est souvent plus performante que l’opérateur + car elle évite la création d’objets temporaires lors de la concaténation.
  2. Clarté du code : Son utilisation explicite peut rendre le code plus clair et plus lisible dans certaines situations.
  1. Limitation : Elle ne peut concaténer que des chaînes de caractères, ce qui limite son utilisation à cette tâche spécifique.

2. Comparaison de Chaînes de Caractères

Comparer des chaînes de caractères permet de déterminer si elles sont égales ou d’établir leur ordre lexicographique.

  • Utilisation de equals() pour vérifier l’égalité :
String str1 = "Java";
String str2 = "java";
boolean isEqual = str1.equals(str2);
System.out.println(isEqual);  // Affiche "false"

Différence entre == et equals() dans les Chaînes de Caractères en Java

En Java, comparer des chaînes de caractères (String) avec == et equals() donne des résultats différents car ces deux opérateurs ont des significations distinctes.

2.1. Comparaison avec ==

L’opérateur == compare les références des objets, c’est-à-dire les adresses mémoire auxquelles ils pointent. Lorsque vous utilisez == pour comparer des chaînes de caractères, vous vérifiez si les deux variables de chaînes font référence au même objet en mémoire. Voici ce qui se passe en Java :

  • Lorsque vous déclarez une chaîne de caractères littérale (par exemple, String str = "Bonjour";), Java vérifie d’abord s’il existe déjà une chaîne identique dans la mémoire de littéraux de chaîne.
  • Si une chaîne identique existe déjà, la variable de chaîne nouvellement déclarée (str) pointera vers cette chaîne existante.
  • Si aucune chaîne identique n’existe, une nouvelle chaîne sera créée dans la mémoire et la variable de chaîne (str) pointera vers cette nouvelle chaîne.

Donc, lorsque vous comparez deux chaînes de caractères avec ==, vous comparez essentiellement les adresses mémoire auxquelles elles pointent. Si les deux chaînes pointent vers la même adresse mémoire, == renverra true, sinon il renverra false.

2.2. Comparaison avec equals()

La méthode equals() est une méthode définie dans la classe Object, et elle est souvent substituée dans la classe String pour comparer le contenu des chaînes de caractères. Lorsque vous appelez equals() sur des chaînes de caractères, il compare les séquences de caractères qu’elles contiennent.

  • La méthode equals() vérifie si les caractères dans les deux chaînes sont les mêmes, c’est-à-dire si elles ont la même longueur et que chaque caractère à la même position dans chaque chaîne est identique.
  • Si les contenus des deux chaînes sont identiques, equals() renverra true, sinon il renverra false.
Exemple Pratique
public class StringComparisonExample {
    public static void main(String[] args) {
        // Déclaration de chaînes de caractères
        String str1 = "Bonjour";
        String str2 = "Bonjour";
        String str3 = new String("Bonjour");

        // Comparaison avec ==
        boolean result1 = (str1 == str2);
        boolean result2 = (str1 == str3);

        // Comparaison avec equals()
        boolean result3 = str1.equals(str2);
        boolean result4 = str1.equals(str3);

        // Affichage des résultats
        System.out.println("Comparaison avec == :");
        System.out.println("str1 == str2 : " + result1);  // Affiche true
        System.out.println("str1 == str3 : " + result2);  // Affiche false

        System.out.println("Comparaison avec equals() :");
        System.out.println("str1.equals(str2) : " + result3);  // Affiche true
        System.out.println("str1.equals(str3) : " + result4);  // Affiche true
    }
}
Explication
  1. Comparaison avec == :
    • str1 == str2 retourne true car str1 et str2 pointent vers le même objet en mémoire. Les littéraux de chaîne de caractères en Java qui sont identiques sont internés (stockés dans une même mémoire de littéraux de chaîne).
    • str1 == str3 retourne false car str3 est un nouvel objet créé avec le mot-clé new, ce qui signifie qu’il occupe un emplacement différent en mémoire.
  2. Comparaison avec equals() :
    • str1.equals(str2) retourne true car les contenus des chaînes sont identiques.
    • str1.equals(str3) retourne également true car, encore une fois, les contenus des chaînes sont identiques, même si str1 et str3 sont des objets différents en mémoire.
  • Utilisation de equalsIgnoreCase() pour ignorer la casse :
String str1 = "Java";
String str2 = "java";
boolean isEqualIgnoreCase = str1.equalsIgnoreCase(str2);
System.out.println(isEqualIgnoreCase);  // Affiche "true"
  • Utilisation de compareTo() pour la comparaison lexicographique :
String str3 = "Apple";
String str4 = "Banana";
int result = str3.compareTo(str4);
System.out.println(result);  // Affiche un nombre négatif car "Apple" est avant "Banana"

La méthode compareTo() renvoie un nombre négatif si la chaîne d’origine précède la chaîne comparée, un nombre positif si elle la suit, et zéro si elles sont égales.

3. Extraction de Sous-chaînes

L’extraction de sous-chaînes permet d’obtenir une partie d’une chaîne de caractères.

  • Utilisation de substring() :
String phrase = "Hello, World!";
String sousChaine = phrase.substring(7, 12);
System.out.println(sousChaine);  // Affiche "World"

La méthode substring(int beginIndex, int endIndex) extrait les caractères de l’index beginIndex à endIndex - 1.

4. Conversion de Chaînes en Majuscules et Minuscules

Convertir des chaînes de caractères en majuscules ou en minuscules est utile pour normaliser les données.

  • Utilisation de toUpperCase() pour convertir en majuscules :
String texte = "Bonjour";
String majuscules = texte.toUpperCase();
System.out.println(majuscules);  // Affiche "BONJOUR"
  • Utilisation de toLowerCase() pour convertir en minuscules :
String minuscules = texte.toLowerCase();
System.out.println(minuscules);  // Affiche "bonjour"

Ces méthodes créent une nouvelle chaîne de caractères avec toutes les lettres converties en majuscules ou en minuscules, respectivement.

La classe String en Java offre de nombreuses méthodes pour manipuler les chaînes de caractères. Voici un aperçu des méthodes les plus couramment utilisées, avec des exemples d’implémentation.

La démo :

1. length()

La méthode length() renvoie la longueur de la chaîne (le nombre de caractères).

public class StringLengthExample {
    public static void main(String[] args) {
        String texte = "Bonjour, monde!";
        int longueur = texte.length();
        System.out.println("Longueur: " + longueur);  // Affiche "Longueur: 15"
    }
}

2. charAt(int index)

La méthode charAt() renvoie le caractère à l’index spécifié.

public class StringCharAtExample {
    public static void main(String[] args) {
        String texte = "Bonjour";
        char caractere = texte.charAt(3);
        System.out.println("Caractère à l'index 3: " + caractere);  // Affiche "Caractère à l'index 3: j"
    }
}

3. indexOf(String str)

La méthode indexOf() renvoie l’index de la première occurrence de la sous-chaîne spécifiée, ou -1 si elle n’est pas trouvée.

public class StringIndexOfExample {
    public static void main(String[] args) {
        String phrase = "Apprendre Java est amusant";
        int index = phrase.indexOf("Java");
        System.out.println("Index de 'Java': " + index);  // Affiche "Index de 'Java': 10"
    }
}

4. substring(int beginIndex, int endIndex)

La méthode substring() renvoie une nouvelle chaîne qui est une sous-chaîne de cette chaîne.

public class StringSubstringExample {
    public static void main(String[] args) {
        String phrase = "Apprendre Java est amusant";
        String sousChaine = phrase.substring(10, 14);
        System.out.println("Sous-chaîne: " + sousChaine);  // Affiche "Sous-chaîne: Java"
    }
}

5. toUpperCase() et toLowerCase()

Les méthodes toUpperCase() et toLowerCase() renvoient la chaîne en majuscules ou en minuscules, respectivement.

public class StringCaseExample {
    public static void main(String[] args) {
        String texte = "Bonjour";
        String enMajuscules = texte.toUpperCase();
        String enMinuscules = texte.toLowerCase();
        System.out.println("En majuscules: " + enMajuscules);  // Affiche "En majuscules: BONJOUR"
        System.out.println("En minuscules: " + enMinuscules);  // Affiche "En minuscules: bonjour"
    }
}

6. replace(CharSequence target, CharSequence replacement)

La méthode replace() remplace toutes les occurrences d’une sous-chaîne par une autre.

public class StringReplaceExample {
    public static void main(String[] args) {
        String phrase = "La programmation en Java est amusante";
        String nouvellePhrase = phrase.replace("Java", "Python");
        System.out.println("Nouvelle phrase: " + nouvellePhrase);  // Affiche "Nouvelle phrase: La programmation en Python est amusante"
    }
}

7. trim()

La méthode trim() supprime les espaces de début et de fin de la chaîne.

public class StringTrimExample {
    public static void main(String[] args) {
        String texte = "   Bonjour   ";
        String texteTrimmed = texte.trim();
        System.out.println("Texte sans espaces: '" + texteTrimmed + "'");  // Affiche "Texte sans espaces: 'Bonjour'"
    }
}

8. split(String regex)

La méthode split() divise la chaîne en un tableau de chaînes autour des correspondances de l’expression régulière donnée.

public class StringSplitExample {
    public static void main(String[] args) {
        String phrase = "Un,deux,trois,quatre";
        String[] parties = phrase.split(",");
        for (String part : parties) {
            System.out.println(part);
        }
        // Affiche :
        // Un
        // deux
        // trois
        // quatre
    }
}

9. String.format()

En Java, le formatage de chaînes de caractères permet de créer des chaînes bien structurées et lisibles. On utilise généralement la méthode String.format() ou la classe Formatter pour formater les chaînes. Voici un exemple détaillé utilisant String.format() :

public class StringFormattingExample {
    public static void main(String[] args) {
        // Variables à formater
        String name = "John";
        int age = 30;
        double salary = 12345.6789;

        // Formatage de chaînes avec String.format()
        String formattedString = String.format("Name: %s, Age: %d, Salary: %.2f", name, age, salary);
        System.out.println(formattedString);  // Affiche "Name: John, Age: 30, Salary: 12345.68"

        // Autre exemple avec des dates
        LocalDate date = LocalDate.now();
        String formattedDate = String.format("Current Date: %tF", date);
        System.out.println(formattedDate);  // Affiche "Current Date: YYYY-MM-DD"

        // Formatage en colonne pour affichage tabulaire
        String header = String.format("%-10s %-10s %-10s", "Name", "Age", "Salary");
        String row1 = String.format("%-10s %-10d %-10.2f", "Alice", 28, 9876.543);
        String row2 = String.format("%-10s %-10d %-10.2f", "Bob", 35, 10500.75);

        System.out.println(header);
        System.out.println(row1);
        System.out.println(row2);
        // Affiche :
        // Name       Age        Salary    
        // Alice      28         9876.54   
        // Bob        35         10500.75  
    }
}

Explication

  1. Variables à Formater :
    • name, age, et salary sont les variables à insérer dans la chaîne formatée.
  2. String.format() :
    • La méthode String.format() permet de créer une chaîne formatée en utilisant des spécificateurs de format.
    • %s : Place un String.
    • %d : Place un entier (int).
    • %.2f : Place un nombre à virgule flottante (double) avec deux décimales.
    • %tF : Formate une date en utilisant le format YYYY-MM-DD.
  3. Alignement et Largeur de Colonne :
    • %-10s : Formate une chaîne de caractères sur 10 caractères, alignée à gauche.
    • %-10d : Formate un entier sur 10 caractères, aligné à gauche.
    • %-10.2f : Formate un nombre flottant sur 10 caractères avec deux décimales, aligné à gauche.
  4. Affichage Tabulaire :
    • Crée des en-têtes et des lignes alignées pour une meilleure lisibilité des données tabulaires.

Ce code montre comment formater des chaînes de caractères pour différents types de données, aligner les résultats et afficher des informations formatées de manière lisible.

10. Exemple Complet

Voici un exemple qui combine plusieurs des méthodes ci-dessus :

public class StringMethodsExample {
    public static void main(String[] args) {
        String texte = "  Bonjour, monde! Apprendre Java est amusant.  ";

        // Longueur
        System.out.println("Longueur: " + texte.length());

        // Caractère à un index spécifique
        System.out.println("Caractère à l'index 5: " + texte.charAt(5));

        // Index d'une sous-chaîne
        System.out.println("Index de 'Java': " + texte.indexOf("Java"));

        // Sous-chaîne
        System.out.println("Sous-chaîne: " + texte.substring(10, 15));

        // Conversion en majuscules et minuscules
        System.out.println("En majuscules: " + texte.toUpperCase());
        System.out.println("En minuscules: " + texte.toLowerCase());

        // Remplacement de sous-chaîne
        System.out.println("Remplacement: " + texte.replace("Java", "Python"));

        // Suppression des espaces de début et de fin
        System.out.println("Texte sans espaces: '" + texte.trim() + "'");

        // Division de la chaîne
        String[] mots = texte.trim().split(" ");
        for (String mot : mots) {
            System.out.println(mot);
        }
    }
}

Conversion entre Chaînes et les autres Types

La conversion entre chaînes de caractères et types primitifs est une opération courante en programmation Java, permettant de transformer des données textuelles en valeurs numériques et vice versa. Cette partie explore les méthodes pour effectuer ces conversions.

La démo :

Conversion de Chaînes en Types Primitifs

En Java, les méthodes parseXxx() sont utilisées pour convertir des chaînes en types primitifs. Par exemple, la méthode parseInt() permet de convertir une chaîne en un entier (int).

String strEntier = "42";
int entier = Integer.parseInt(strEntier); // 42

String strDecimale = "3.14";
double decimale = Double.parseDouble(strDecimale); // 3.14

De même, il existe des méthodes pour convertir des chaînes en d’autres types primitifs tels que parseDouble(), parseFloat(), parseLong(), etc.

Conversion de Types Primitifs en Chaînes

La classe String offre plusieurs méthodes pour convertir des types primitifs en chaînes de caractères. L’une des méthodes les plus couramment utilisées est valueOf(), qui prend en argument un type primitif et renvoie sa représentation sous forme de chaîne.

int entier = 42;
String strEntier = String.valueOf(entier); // "42"

double decimale = 3.14;
String strDecimale = String.valueOf(decimale); // "3.14"
Conversion des Chaînes vers les Objets Enveloppes

Les méthodes valueOf() des classes enveloppes convertissent les chaînes en objets enveloppes.

String strEntier = "42";
Integer entier = Integer.valueOf(strEntier); // Integer(42)

String strDecimale = "3.14";
Double decimale = Double.valueOf(strDecimale); // Double(3.14)

Ces méthodes peuvent également lancer une NumberFormatException, il est donc prudent de gérer les exceptions comme montré précédemment.

Gestion des Erreurs de Conversion

Il est important de noter que les méthodes de conversion peuvent lever des exceptions si la chaîne n’est pas dans un format approprié pour être convertie en type primitif. Il est donc recommandé d’encadrer les appels de ces méthodes avec des blocs try-catch pour gérer les éventuelles exceptions.

String strEntier = "42a";
try {
    int entier = Integer.parseInt(strEntier); // NumberFormatException
} catch (NumberFormatException e) {
    System.out.println("Erreur de format : " + e.getMessage());
}
Exemple Complet

Voici un exemple complet démontrant différentes conversions :

public class ConversionDemo {
    public static void main(String[] args) {
        // Conversion des types primitifs vers chaînes
        int entier = 42;
        String strEntier = Integer.toString(entier);
        System.out.println("Integer to String: " + strEntier);

        double decimale = 3.14;
        String strDecimale = Double.toString(decimale);
        System.out.println("Double to String: " + strDecimale);

        // Conversion des chaînes vers types primitifs
        String strEntier2 = "42";
        try {
            int entier2 = Integer.parseInt(strEntier2);
            System.out.println("String to Integer: " + entier2);
        } catch (NumberFormatException e) {
            System.out.println("Erreur de format : " + e.getMessage());
        }

        String strDecimale2 = "3.14";
        try {
            double decimale2 = Double.parseDouble(strDecimale2);
            System.out.println("String to Double: " + decimale2);
        } catch (NumberFormatException e) {
            System.out.println("Erreur de format : " + e.getMessage());
        }

        // Conversion des chaînes vers objets enveloppes
        String strEntier3 = "42";
        Integer entier3 = Integer.valueOf(strEntier3);
        System.out.println("String to Integer Object: " + entier3);

        String strDecimale3 = "3.14";
        Double decimale3 = Double.valueOf(strDecimale3);
        System.out.println("String to Double Object: " + decimale3);
    }
}

Chaine de type « TEXT BLOCKS » de Java SE

Java SE 15 a déployé une fonctionnalité longuement attendue : les chaînes de type « Text Blocks ». Cette innovation apporte une syntaxe élégante et efficace pour la création et la manipulation de chaînes de texte longues et multilignes en Java.

La démo :

1. Qu’est-ce qu’un Text Block ?

Un Text Block est une façon d’écrire des chaînes de caractères sur plusieurs lignes sans utiliser beaucoup de caractères d’échappement comme \n pour les nouvelles lignes.

2. Exemple classique sans Text Block

Avant l’introduction des Text Blocks, écrire des chaînes de caractères multilignes était compliqué. Voici un exemple d’un morceau de HTML sans utiliser de Text Block :

String html = "<html>\n" +
              "    <body>\n" +
              "        <p>Bonjour, monde!</p>\n" +
              "    </body>\n" +
              "</html>";

3. Exemple avec Text Block

Avec les Text Blocks, c’est beaucoup plus simple. Voici le même exemple en utilisant un Text Block :

String html = """
    <html>
        <body>
            <p>Bonjour, monde!</p>
        </body>
    </html>
    """;

4. Avantages des Text Blocks

a. Lisibilité

Les Text Blocks rendent le code plus lisible car vous pouvez écrire le texte exactement comme il apparaît, sans avoir à ajouter des \n pour les nouvelles lignes.

b. Moins de caractères d’échappement

Avec les Text Blocks, vous n’avez pas besoin d’utiliser des caractères d’échappement comme \" pour les guillemets ou \\ pour les barres obliques inverses.

5. Caractéristiques des Text Blocks

a. Préservation de l’indentation

Les Text Blocks conservent l’indentation relative de votre texte, mais ils suppriment l’indentation commune, ce qui signifie que votre texte sera bien formaté.

Exemple :

String json = """
    {
        "nom": "Exemple",
        "valeur": 123
    }
    """;
b. Facilité d’utilisation

Les Text Blocks sont utiles pour écrire du HTML, du JSON, du XML, des messages d’erreur, et plus encore.

6. Méthodes Utiles

a. translateEscapes()

Cette méthode interprète les séquences d’échappement dans un Text Block.

Exemple :

String withEscapes = """
        Voici une ligne de texte\\nEt une autre ligne de texte
        """.translateEscapes();
b. Interpolation de chaînes dans les Text Blocks

Une autre fonctionnalité utile des chaînes de type « Text Blocks » est l’interpolation de chaînes, qui permet d’incorporer des expressions Java dans le texte. Par exemple :

String name = "John";
String textBlockWithInterpolation = """
    Bonjour, %s!
    Bienvenue dans le monde des Text Blocks.
    """.formatted(name);

Dans cet exemple, %s est une marque de formatage qui sera remplacée par la valeur de la variable name lors de la création de la chaîne.

Bonnes pratiques et Astuces

Les techniques avancées de manipulation des chaînes de caractères en Java vont au-delà des opérations de base et offrent des fonctionnalités plus puissantes pour traiter des scénarios complexes. Dans cette section, nous explorerons l’utilisation de la classe StringBuilder pour une manipulation mutable des chaînes, ainsi que d’autres méthodes avancées pour répondre à des besoins spécifiques.

1. Manipulation Mutable avec StringBuilder :

La classe StringBuilder est souvent utilisée lorsque des opérations de modification fréquentes sont nécessaires sur une chaîne. Contrairement à la classe String, les objets StringBuilder sont modifiables.

Exemple :
StringBuilder builder = new StringBuilder("Programmation");
builder.append(" en Java");
builder.insert(0, "La ");
builder.replace(20, 25, "C++");
System.out.println("Résultat : " + builder.toString());
Explication :
  • StringBuilder: Crée un objet StringBuilder initialisé avec « Programmation ».
  • append(" en Java"): Ajoute la chaîne  » en Java » à la fin.
  • insert(0, "La "): Insère la chaîne « La  » au début.
  • replace(20, 25, "C++"): Remplace la sous-chaîne de la position 20 à 25 par « C++ ».
  • toString(): Convertit le StringBuilder en une chaîne de caractères.
  • Résultat : La sortie affichera « Résultat : La Programmation en C++ ».
2. Division et Jointure :

Les méthodes split() et join() sont utiles pour diviser une chaîne en plusieurs parties et les rejoindre ultérieurement.

Exemple :
String phrase = "La programmation en Java est intéressante";
String[] mots = phrase.split(" ");
String nouvellePhrase = String.join("-", mots);
System.out.println("Nouvelle phrase : " + nouvellePhrase);
Explication :
  • split(" "): Divise la phrase en un tableau de mots en utilisant l’espace comme séparateur.
  • String.join("-", mots): Joint les mots en utilisant le trait d’union comme séparateur.
  • Résultat : La sortie affichera « Nouvelle phrase : La-programmation-en-Java-est-intéressante ».
3. Utilisation de startsWith() et endsWith()
startsWith() : Vérifier si une Chaîne Commence par une Séquence Donnée :

La méthode startsWith() est utilisée pour déterminer si une chaîne commence par une séquence spécifiée. Voici un exemple :

String texte = "La programmation en Java";
boolean commenceParLa = texte.startsWith("La");
System.out.println("Commence par 'La' : " + commenceParLa);

Explication détaillée :

  • startsWith("La"): Cette méthode retourne true si la chaîne commence par la séquence « La », sinon elle retourne false.
  • Résultat : La sortie affichera « Commence par ‘La’ : true », car la chaîne commence effectivement par « La ».
endsWith() : Vérifier si une Chaîne se Termine par une Séquence Donnée :

La méthode endsWith() est utilisée pour déterminer si une chaîne se termine par une séquence spécifiée. Voici un exemple :

String texte = "La programmation en Java";
boolean seTermineParJava = texte.endsWith("Java");
System.out.println("Se termine par 'Java' : " + seTermineParJava);

Explication :

  • endsWith("Java"): Cette méthode retourne true si la chaîne se termine par la séquence « Java », sinon elle retourne false.
  • Résultat : La sortie affichera « Se termine par ‘Java’ : true », car la chaîne se termine effectivement par « Java ».

Ces méthodes sont utiles pour effectuer des vérifications de préfixe et de suffixe dans des chaînes, ce qui est souvent nécessaire lors du traitement de données textuelles

4. Remplacement Rapide avec replaceFirst() et replaceAll()

Si vous devez remplacer une occurrence spécifique ou toutes les occurrences d’une sous-chaîne, vous pouvez utiliser replaceFirst() et replaceAll().

String phrase = "La pomme est rouge. La pomme est délicieuse.";
String nouvellePhrase1 = phrase.replaceFirst("pomme", "orange");
String nouvellePhrase2 = phrase.replaceAll("pomme", "orange");
System.out.println("ReplaceFirst : " + nouvellePhrase1);
System.out.println("ReplaceAll : " + nouvellePhrase2);

Explication :

  • replaceFirst("pomme", "orange"): Remplace la première occurrence de « pomme » par « orange ».
  • replaceAll("pomme", "orange"): Remplace toutes les occurrences de « pomme » par « orange ».
5. Utilisation de matches() pour la Correspondance avec une Expression Régulière

La méthode matches() permet de vérifier si une chaîne correspond à une expression régulière.

String email = "utilisateur@example.com";
boolean estEmailValide = email.matches("^[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]{2,})+$");
System.out.println("L'email est valide : " + estEmailValide);

Explication :

  • matches("^[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]{2,})+$"): Utilise une expression régulière pour vérifier la validité d’un email.
  • Résultat : La sortie affichera « L’email est valide : true » si l’email respecte le format défini.
6. Utilisation de replace() pour Remplacer Plusieurs Caractères

La méthode replace() peut être utilisée pour remplacer plusieurs caractères en une seule fois.

String texte = "Java est | puissant | et | polyvalent";
String texteModifie = texte.replace("|", "-").replace(" et ", "&");
System.out.println("Texte modifié : " + texteModifie);

Explication :

  • replace("|", "-").replace(" et ", "&"): Remplace les occurrences de « | » par « – » et  » et  » par « & » en une seule expression.
  • Résultat : La sortie affichera « Texte modifié : Java est – puissant – & polyvalent ».

7. Conversion entre String et char[]

Vous pouvez convertir une chaîne en tableau de caractères et vice versa.

Conversion de String vers char[] :
String texte = "Java";
char[] tableauDeCaracteres = texte.toCharArray();
System.out.println("Tableau de caractères : " + Arrays.toString(tableauDeCaracteres));
Conversion de char[] vers String :
char[] tableauDeCaracteres = {'J', 'a', 'v', 'a'};
String texte = new String(tableauDeCaracteres);
System.out.println("Chaîne : " + texte);
8. Utilisation de StringUtils de la bibliothèque Apache Commons Lang

La bibliothèque Apache Commons Lang propose la classe StringUtils qui offre diverses méthodes pour manipuler les chaînes de manière plus avancée.

String texte = "Manipulation avancée avec StringUtils";
String majuscules = StringUtils.upperCase(texte);
String inverse = StringUtils.reverse(texte);
boolean contientVoyelles = StringUtils.containsAny(texte, 'a', 'e', 'i', 'o', 'u');

Explication :

  • StringUtils.upperCase(texte): Convertit la chaîne en majuscules.
  • StringUtils.reverse(texte): Inverse la chaîne.
  • StringUtils.containsAny(texte, 'a', 'e', 'i', 'o', 'u'): Vérifie si la chaîne contient au moins une voyelle.
9. Utilisation de String::isBlank pour Vérifier si une Chaîne est Vide ou Contient Seulement des Espaces

La méthode isBlank permet de vérifier si une chaîne est vide ou ne contient que des espaces.

String texteVide = "";
String texteAvecEspaces = "   ";
System.out.println("Est vide : " + texteVide.isBlank());
System.out.println("Contient seulement des espaces : " + texteAvecEspaces.isBlank());

Explication :

  • texteVide.isBlank(): Vérifie si la chaîne est vide ou contient uniquement des espaces.
  • texteAvecEspaces.isBlank(): Vérifie si la chaîne contient uniquement des espaces.
10. Utilisation de String::translateEscapes pour Traiter les Échappements Unicode

La méthode translateEscapes permet de traiter les échappements Unicode dans une chaîne.

String texteUnicode = "Hello\\nWorld\\t2024";
String texteTraduit = texteUnicode.translateEscapes();
System.out.println("Texte traduit : " + texteTraduit);

Explication :

  • texteUnicode.translateEscapes(): Traduit les échappements Unicode dans la chaîne.

Exemples Pratiques et Applications

Exercice 1: Trouver les anagrammes

Écrivez un programme en Java qui prend deux chaînes de caractères en entrée et détermine si ces deux chaînes sont des anagrammes l’une de l’autre. Deux chaînes sont dites anagrammes si elles contiennent exactement les mêmes caractères avec les mêmes fréquences, mais dans un ordre différent.

Exemple :

  • Chaîne 1 : « listen »
  • Chaîne 2 : « silent »

Sortie attendue : « Les chaînes sont des anagrammes. »

  • Chaîne 1 : « hello »
  • Chaîne 2 : « world »

Sortie attendue : « Les chaînes ne sont pas des anagrammes. »

Correction

import java.util.Arrays;

public class AnagramChecker {
    public static void main(String[] args) {
        String str1 = "listen";
        String str2 = "silent";
        
        boolean areAnagrams = areAnagrams(str1, str2);
        
        if (areAnagrams) {
            System.out.println("Les chaînes sont des anagrammes.");
        } else {
            System.out.println("Les chaînes ne sont pas des anagrammes.");
        }
    }
    
    public static boolean areAnagrams(String str1, String str2) {
        if (str1.length() != str2.length()) {
            return false;
        }
        
        char[] charArray1 = str1.toCharArray();
        char[] charArray2 = str2.toCharArray();
        
        Arrays.sort(charArray1);
        Arrays.sort(charArray2);
        
        return Arrays.equals(charArray1, charArray2);
    }
}
  1. Vérifiez d’abord si les deux chaînes ont la même longueur. Si ce n’est pas le cas, elles ne peuvent pas être des anagrammes.
  2. Convertissez les chaînes en tableaux de caractères.
  3. Triez les deux tableaux de caractères.
  4. Comparez les tableaux triés. S’ils sont identiques, les chaînes sont des anagrammes. Sinon, elles ne le sont pas.

Exercice 2: Compter les Occurrences d’un Caractère dans une Chaîne

Objectif: Écrire une méthode qui compte le nombre d’occurrences d’un caractère spécifié dans une chaîne de caractères donnée.

Correction

solution 1

public class CharacterCounter {
    
    // Méthode pour compter les occurrences d'un caractère dans une chaîne
    public static int countOccurrences(String str, char ch) {
        int count = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == ch) {
                count++;
            }
        }
        return count;
    }
    
    // Méthode principale pour tester le comptage des occurrences
    public static void main(String[] args) {
        String str = "Bonjour le monde";
        char ch = 'o';
        int occurrences = countOccurrences(str, ch);
        System.out.println("Le caractère '" + ch + "' apparaît " + occurrences + " fois dans la chaîne.");
    }
}

Explication:

  • Nous utilisons une boucle for pour parcourir chaque caractère de la chaîne.
  • À chaque itération, nous vérifions si le caractère à l’indice actuel est égal au caractère spécifié.
  • Si c’est le cas, nous incrémentons le compteur d’occurrences.
  • Enfin, nous retournons le nombre total d’occurrences trouvées.

Cette méthode permet de compter le nombre d’occurrences d’un caractère spécifié dans une chaîne de caractères donnée.

Solution 2 :

import java.util.stream.IntStream;

public class CharacterCounter {
    
    // Méthode pour compter les occurrences d'un caractère dans une chaîne
    public static long countOccurrences(String str, char ch) {
        return str.chars().filter(c -> c == ch).count();
    }
    
    // Méthode principale pour tester le comptage des occurrences
    public static void main(String[] args) {
        String str = "Bonjour le monde";
        char ch = 'o';
        long occurrences = countOccurrences(str, ch);
        System.out.println("Le caractère '" + ch + "' apparaît " + occurrences + " fois dans la chaîne.");
    }
}

Dans cette version, nous utilisons la méthode chars() pour obtenir un flux d’entiers représentant les valeurs ASCII des caractères dans la chaîne. Ensuite, nous utilisons la méthode filter pour filtrer seulement les caractères égaux au caractère spécifié ch, puis nous utilisons count() pour obtenir le nombre total d’occurrences.

Cette méthode est plus concise et exprime plus directement l’intention de compter les occurrences du caractère spécifié dans la chaîne donnée.

Exercice 3 : Vérifier si une Chaîne est un Palindrome

Objectif: Écrire une méthode qui vérifie si une chaîne de caractères donnée est un palindrome, c’est-à-dire si elle se lit de la même manière de gauche à droite et de droite à gauche.

Correction

public class PalindromeChecker {
    
    // Méthode pour vérifier si une chaîne est un palindrome
    public static boolean isPalindrome(String str) {
        int left = 0;
        int right = str.length() - 1;
        
        while (left < right) {
            if (str.charAt(left) != str.charAt(right)) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
    
    // Méthode principale pour tester si une chaîne est un palindrome
    public static void main(String[] args) {
        String str = "radar";
        boolean isPalindrome = isPalindrome(str);
        if (isPalindrome) {
            System.out.println("La chaîne '" + str + "' est un palindrome.");
        } else {
            System.out.println("La chaîne '" + str + "' n'est pas un palindrome.");
        }
    }
}

Explication:

  • Nous utilisons deux indices, left et right, pour parcourir la chaîne de chaque extrémité.
  • À chaque itération, nous comparons les caractères à ces indices pour vérifier s’ils sont égaux.
  • Si à un moment donné les caractères ne sont pas égaux, la méthode renvoie false car la chaîne n’est pas un palindrome.
  • Si nous atteignons le milieu de la chaîne sans trouver de caractères différents, la méthode renvoie true car la chaîne est un palindrome.

Cette méthode permet de vérifier si une chaîne donnée est un palindrome.

Exercice 4 : Supprimer les Espaces d’une Chaîne de Caractères

Objectif : Écrire une méthode qui prend une chaîne de caractères en entrée et renvoie une nouvelle chaîne dans laquelle tous les espaces ont été supprimés.

Correction

Solution 1 :

public class SpaceRemover {
    
    // Méthode pour supprimer les espaces d'une chaîne de caractères
    public static String removeSpaces(String str) {
        StringBuilder result = new StringBuilder();
        
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) != ' ') {
                result.append(str.charAt(i));
            }
        }
        
        return result.toString();
    }
    
    // Méthode principale pour tester la suppression des espaces
    public static void main(String[] args) {
        String str = "Hello World";
        String result = removeSpaces(str);
        System.out.println("Chaîne sans espaces : " + result);
    }
}

Explication :

  • Nous utilisons un objet StringBuilder pour construire la nouvelle chaîne sans espaces.
  • Nous parcourons chaque caractère de la chaîne d’origine à l’aide d’une boucle for.
  • Si le caractère actuel n’est pas un espace, nous l’ajoutons à l’objet StringBuilder.
  • Enfin, nous retournons la nouvelle chaîne sans espaces à l’aide de la méthode toString() de StringBuilder.

Cette méthode permet de supprimer tous les espaces d’une chaîne de caractères donnée.

Solution 2 :

voici une autre méthode pour supprimer les espaces d’une chaîne sans utiliser de boucle for, en utilisant les méthodes replace() de la classe String :

public class SpaceRemover {
    
    // Méthode pour supprimer les espaces d'une chaîne de caractères
    public static String removeSpaces(String str) {
        return str.replace(" ", "");
    }
    
    // Méthode principale pour tester la suppression des espaces
    public static void main(String[] args) {
        String str = "Hello World";
        String result = removeSpaces(str);
        System.out.println("Chaîne sans espaces : " + result);
    }
}

Cette méthode utilise la méthode replace() pour remplacer tous les espaces par une chaîne vide, ce qui a pour effet de supprimer tous les espaces de la chaîne originale.

Exercice 5 : Compter le Nombre de Mots dans une Chaîne

Objectif : Écrire une méthode qui compte le nombre de mots dans une chaîne de caractères donnée. On considère qu’un mot est une séquence de caractères séparée par des espaces.

Correction

public class WordCounter {
    
    // Méthode pour compter le nombre de mots dans une chaîne
    public static int countWords(String str) {
        // Utilisation de la méthode split() pour diviser la chaîne en mots
        String[] words = str.split("\\s+");
        return words.length;
    }
    
    // Méthode principale pour tester le comptage des mots
    public static void main(String[] args) {
        String str = "Bonjour le monde";
        int wordCount = countWords(str);
        System.out.println("Nombre de mots dans la chaîne : " + wordCount);
    }
}

Explication :

  • Nous utilisons la méthode split("\\s+") pour diviser la chaîne en mots en utilisant les espaces comme délimiteurs.
  • Le motif "\\s+" correspond à un ou plusieurs espaces, ce qui permet de gérer les espaces consécutifs entre les mots.
  • La méthode split() retourne un tableau de chaînes de caractères représentant les mots individuels dans la chaîne d’origine.
  • Nous retournons simplement la longueur de ce tableau, qui correspond au nombre de mots dans la chaîne.

Cette méthode permet de compter le nombre de mots dans une chaîne de caractères donnée.

Quiz de ce tuto

Vous pouvez tester que vous avez bien assimiler tous ce que nous avons appris ensemble via ce quiz 🙂 🙂 amusez vous bien.

/17
0 votes, 0 avg
12
Créé le

Quiz JAVA SE : La Manipulation de chaine de Caractères

Ce quiz vous aide à améliorer vos connaissances en Java SE 🙂 🙂 

1 / 17

1. Comment vérifier si deux chaînes de caractères sont égales en Java ?

2 / 17

2. Quelle méthode est utilisée pour extraire une sous-chaîne d'une chaîne donnée en Java ?

3 / 17

3. Comment vérifier si une chaîne de caractères donnée se termine par une sous-chaîne spécifiée en Java ?

4 / 17

4. Quelle méthode est utilisée pour supprimer les espaces blancs au début et à la fin d'une chaîne de caractères en Java ?

5 / 17

5. Comment convertir une chaîne de caractères en minuscules en Java ?

6 / 17

6. Comment vérifier si une chaîne de caractères est égale à une autre, sans considérer la casse, en Java ?

7 / 17

7. Comment obtenir l'index de la première occurrence d'une sous-chaîne dans une chaîne de caractères en Java ?

8 / 17

8. Quelle méthode est utilisée pour convertir une chaîne de caractères en majuscules en Java ?

9 / 17

9. Comment diviser une chaîne de caractères en mots en utilisant un délimiteur spécifié en Java ?

10 / 17

10. Quelle méthode est utilisée pour remplacer toutes les occurrences d'une sous-chaîne par une autre dans une chaîne donnée en Java, sans considérer la casse ?

11 / 17

11. Quelle méthode est utilisée pour obtenir la longueur d'une chaîne de caractères en Java ?

12 / 17

12. Quelle méthode est utilisée pour vérifier si une chaîne de caractères contient une sous-chaîne spécifique en Java ?

13 / 17

13. Quelle méthode est utilisée pour remplacer toutes les occurrences d'une sous-chaîne par une autre dans une chaîne donnée en Java ?

14 / 17

14. Comment vérifier si une chaîne de caractères est vide ou ne contient que des espaces blancs en Java ?

15 / 17

15. Quelle méthode est utilisée pour obtenir le caractère à une position spécifique dans une chaîne de caractères en Java ?

16 / 17

16. Comment vérifier si une chaîne de caractères contient uniquement des lettres en Java ?

17 / 17

17. Comment concaténer deux chaînes de caractères en Java ?

Votre note est de

0%

Veuillez évaluer ce quiz

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *