![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
eulbobo
HAHA...
Toi tu commences à mettre le doigt dans les trucs sales :p
Alors, il existe plusieurs manière de faire de la comparaison de chaîne de manière case insensitive, mais elle ne fonctionnent pas toutes de la même façon.
Dans ton cas, tu veux faire du remplacement de chaine, donc tu n'as pas de manière simple de faire vu que tu veux conserver la casse d'origine du mot.
En effet, la technique la plus simple consiste à tout passer en majuscules (phrase et mots clés) et de faire la suppression avec replaceAll
Problème : ça détruit la casse de toute la ligne d'un coup.
Autre problème : dans certains cas, le upperCase (ou le lowerCase) ne permet pas d'obtenir des résultats cohérents (typiquement avec les caractères accentués).
Donc dans ton cas, il va falloir changer la logique.
Tu gardes la logique pour récupérer les lignes de texte et de stopwords, sauf que les stopwords, tu les récupères en majuscule (ou en minuscule, comme tu veux)
La ligne récupérée, tu la mets en majuscule dans une AUTRE variable (on va l'appeller ligneUpper)
Dans ligneUpper, tu recherches le premier index de ton premier mot clé, tu le stockes, et tu supprimes le premier mot clé (avec replace, pas replaceAll)
Tu recommences jusqu'à ce que tu n'ai plus de correspondance
Quand tu n'as plus de correspondances, tu te retrouves avec une liste qui contient les index de début du premier mot clé. Il te faut alors supprimer dans la chaine initiale tous les mots clés dont tu connais l'index (et la taille) avec des substring
Et tu recommences pour chaque mot
Puis pour chaque ligne
Ca va être nettement plus long et plus chiant à tester, mais je ne vois pas trop comment tu pourrais faire autrement.
Niveau algo, il y a surement plus simple, mais globalement, tu va devoir beaucoup manipuler de chaine de caractères
Note qu'il existe surement des libraires qui savent faire ça (genre StringUtils de apache commons, mais pas sûr)
Partager