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

Résolu
histl4000 Messages postés 129 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
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.


A voir également:

2 réponses

Utilisateur anonyme
 
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   Statut Membre Dernière intervention   3
 
Merci beaucoup, ça a marché
0
Utilisateur anonyme
 
De rien
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   3
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > histl4000 Messages postés 129 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   3
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > histl4000 Messages postés 129 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   3
 
Merci beaucoup pour ton aide, Whismeril vient de me dépanner.
0