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 -
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 :
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.
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:
- Java caractère spéciaux
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Caractere speciaux mac - Guide
2 réponses
Bonsoir
voir ici
Clique sur l'onglet Content pour voir le résultat du remplacement
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
histl4000
Messages postés
129
Date d'inscription
Statut
Membre
Dernière intervention
3
Merci beaucoup, ça a marché
Utilisateur anonyme
De rien
Bonjour,
C'est bizarre de considérer
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
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(); }
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; }