Comment enlever les mots avec des caractères spéciaux ?
Résolu
histl4000
Messages postés
140
Statut
Membre
-
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.
2 réponses
-
Bonsoir
voir icihttp://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
-
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(); }-
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...
- 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; }
-
-
-