# EXO-JAVA-Manipulation des chaînes de caractères ## Objectif Créer une application de traitement de texte permettant d'explorer et de maîtriser les différentes fonctionnalités de manipulation des chaînes de caractères en Java. ## Prérequis - Connaître les bases de la programmation orientée objet - Comprendre les concepts de base des chaînes de caractères - Avoir une bonne compréhension des collections Java ## Énoncé ### Partie 1 : Traitement de base des chaînes 1. Créer une classe `TextProcessor` avec les méthodes suivantes : - `countWords(String text)` : Compte le nombre de mots dans un texte en gérant les espaces multiples - `countOccurrences(String text, String word)` : Compte les occurrences d'un mot sans tenir compte de la casse - `reverse(String text)` : Inverse une chaîne à l'aide de StringBuilder - `removeDuplicates(String text)` : Élimine les mots en double tout en conservant l'ordre d'apparition - `extractWords(String text)` : Extrait tous les mots dans un tableau en gérant les espaces multiples 1. Implémenter des méthodes de transformation : - `toTitleCase(String text)` : Met en majuscule la première lettre de chaque mot - `toCamelCase(String text)` : Convertit un texte en camelCase (exemple : « hello world » → « helloWorld ») - `toSnakeCase(String text)` : Convertit un texte en snake_case (exemple : « hello world » → « hello_world ») - `compress(String text)` : Supprime les espaces multiples et les espaces en début et fin de texte ### Partie 2 : Formatage avancé 1. Créer une classe `TextFormatter` avec les méthodes : - `alignLeft(String text, int width)` : Aligne le texte à gauche sur une largeur spécifiée - `alignRight(String text, int width)` : Aligne le texte à droite sur une largeur spécifiée - `alignCenter(String text, int width)` : Centre le texte sur une largeur spécifiée - `createTable(List data, int[] columnWidths)` : Génère un tableau formaté avec des colonnes de largeur définie - `wrapText(String text, int lineWidth)` : Adapte le texte à une largeur donnée en préservant l'intégrité des mots - `formatNumber(double number, String pattern)` : Formate un nombre selon un modèle (exemple : "%.2f") - `formatDate(Date date, String pattern)` : Formate une date selon un modèle (exemple : "dd/MM/yyyy") 1. Implémenter des méthodes de mise en forme : - `addBorders(String text)` : Encadre le texte avec des bordures - `addNumbering(String text)` : Numérote les lignes du texte - `highlightWord(String text, String word)` : Souligne un mot spécifique dans le texte - `createReport(Map data)` : Génère un rapport structuré à partir des données ### Partie 3 : Analyse de texte 1. Créer une classe `TextAnalyzer` avec les méthodes suivantes : - `getWordFrequency(String text)` : Calcule la fréquence d'apparition de chaque mot dans le texte - `findPalindromes(String text)` : Identifie tous les palindromes présents dans le texte - `findLongestWord(String text)` : Détermine le mot le plus long du texte - `findShortestWord(String text)` : Détermine le mot le plus court du texte 1. Implémenter des méthodes d'analyse avancée : - `findAnagrams(String text)` : Identifie et regroupe les anagrammes dans le texte - `extractSentences(String text)` : Divise le texte en phrases distinctes