Comment enlever les mots avec des caractères spéciaux ?

Résolu/Fermé
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 - Modifié le 15 déc. 2017 à 17:35
Whismeril Messages postés 17810 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 octobre 2022 - 16 déc. 2017 à 16:10
Bonjour,
On m'a déjà proposer une solution a ce problème mais finalement elle m'avait posé X problème par la suite. Donc avez-vous une idée pour ne pas prendre de mot avec des caractères spéciaux (exemple : !()}ç/,;=+-_). Ma méthode analysera un string et vérifiera si elle contient oui ou non un caractère spécial si c'est le cas le mot sera "supprimer".
Exemple de méthode :

private String enleverCaracteresSpeciauxDuMot(String texte) {
return texte = texte.replaceAll("[^a-zA-Z0-9 -]", "");
}

Mon exemple ne marche pas car si j'insère le mot "Jack-- maison voiture" seul les caractères spéciaux seront supprimés donc le résultat est "Jack maison voiture" alors que je voudrai "maison voiture" comme résultat. Par la suite, j'ajouterai les mots dans un tableau pour les afficher...
J'ai également utiliser un Stream.of(texte.split(" ").filter... qui marche très bien donc les mots ne sont pas pris du tout le problème c'est que lorsque je fais un copier-coller d'un fichier texte resultat: (" Jack juju\r\n" + "test") seul Jack est affiché car les autres sont considérés comme ayant un caractère spécial.


2 réponses

Whismeril Messages postés 17810 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 octobre 2022 860
15 déc. 2017 à 18:38
Bonsoir
voir ici
http://regexstorm.net/tester?p=%28%5cw*%5b%5c!%5c%28%5c%29%5c%7d%c3%a7%2f%5c%2c%5c%3b%5c%3d%5c%2b%5c-_%5d%5cw*%29%2b&i=Jack--+maison+voiture+jo-jo&r=

Clique sur l'onglet Content pour voir le résultat du remplacement
4
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 2
16 déc. 2017 à 14:06
Merci beaucoup, ça a marché
0
Whismeril Messages postés 17810 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 octobre 2022 860
16 déc. 2017 à 16:10
De rien
0
KX Messages postés 16597 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 septembre 2022 2 975
15 déc. 2017 à 17:57
Bonjour,

C'est bizarre de considérer
ç
comme un caractère spécial alors que c'est une lettre valide.

Rappel : Java considères des caractères en UTF-16 donc on peut utiliser les blocs Unicode pour identifier le rôle de chaque caractère et par exemple ne conserver que les lettres.

La classe java.lang.Character contient pas mal de méthodes utiles pour faire ça.
https://docs.oracle.com/javase/9/docs/api/java/lang/Character.html

public static String retainLetterOnly(String str) {
    StringBuilder result = new StringBuilder();
    for (char c : str.toCharArray()) {
        if (Character.isLetter(c))
            result.append(c);
    }
    return result.toString();
}
1
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 2
15 déc. 2017 à 18:21
Merci mais cette méthode ne fonctionnera pas dans mon code. Mon texte vient d'un champ TextArea. Y'a t-il moyen de couper un string en mot ? Car lorsque je fais TextArea.getText(). Mon string est égal à la phrase...
0
KX Messages postés 16597 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 septembre 2022 2 975 > histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018
15 déc. 2017 à 18:33
Le découpage par mots tu peux le faire avec
Character.isWhitespace(c)
, le mieux étant de tout faire dans la même boucle comme ça tu ne lis les caractères qu'une seule fois.

public static List<String> getWordsLetter(String str) {
    List<String> result = new ArrayList<>();
    StringBuilder buffer = new StringBuilder();
    for (char c : str.toCharArray()) {
        if (Character.isLetter(c)) {
            buffer.append(c);
        } else if (Character.isWhitespace(c)) {
            if (buffer.length() > 0) {
                result.add(buffer.toString());
                buffer.setLength(0);
            }
        }
    }
    if (buffer.length() > 0) {
        result.add(buffer.toString());
    }
    return result;
}
0
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 2
15 déc. 2017 à 18:24
Je ne vois même pas pourquoi mes mots sont pas pris en compte avec un stream.of ? Exemple mon string = " Je pars en" + "vacance". Lorsque je vais mon stream.of pour supprimer les caractère spéciaux les mots "en" et "vacance" ne s'affichent pas lorsque je fais mon append pour les afficher.
0
KX Messages postés 16597 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 26 septembre 2022 2 975 > histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018
15 déc. 2017 à 18:41
Pour te déboguer sur un code en particulier il faudrait que tu nous le montre...
0
histl4000 Messages postés 129 Date d'inscription lundi 3 juillet 2017 Statut Membre Dernière intervention 12 juillet 2018 2
16 déc. 2017 à 14:06
Merci beaucoup pour ton aide, Whismeril vient de me dépanner.
0