Comment enlever les mots avec des caractères spéciaux ? [Résolu/Fermé]

Signaler
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
-
Messages postés
16041
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 juin 2021
-
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

Messages postés
16041
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 juin 2021
711
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
2
Merci beaucoup, ça a marché
Messages postés
16041
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 juin 2021
711
De rien
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
2 845
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();
}
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
2
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...
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
2 845 >
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018

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;
}
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
2
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.
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
2 845 >
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018

Pour te déboguer sur un code en particulier il faudrait que tu nous le montre...
Messages postés
129
Date d'inscription
lundi 3 juillet 2017
Statut
Membre
Dernière intervention
12 juillet 2018
2
Merci beaucoup pour ton aide, Whismeril vient de me dépanner.