Java regex problème avec caratère @
vert
-
heyquem Messages postés 759 Date d'inscription Statut Membre Dernière intervention -
heyquem Messages postés 759 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je souhaiterais remplacer les @ à la fin d'un mot par une autre lettre. Quand je teste @\\\\b cela fonctionne pas (bien que a\\\\b fonctionne bien si je veux remplacer a à la fin d'un mot). Quelqu'un peux m'aider ?
Je souhaiterais remplacer les @ à la fin d'un mot par une autre lettre. Quand je teste @\\\\b cela fonctionne pas (bien que a\\\\b fonctionne bien si je veux remplacer a à la fin d'un mot). Quelqu'un peux m'aider ?
A voir également:
- Java regex problème avec caratère @
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
4 réponses
Comment fais-tu ton code ?
Moi je n'ai pas de problème particulier en utilisant un @ avec regex :
La confiance n'exclut pas le contrôle
Moi je n'ai pas de problème particulier en utilisant un @ avec regex :
import java.util.regex.Pattern; static String remplacerFinMots(String phrase, String finAvant,String finApres) { return Pattern.compile(finAvant+"(?=\\W)") .matcher(phrase) .replaceAll(finApres); } public static void main(String args[]) { System.out.println(remplacerFinMots("M@ phr@se de test.", "@", "a")); // "M@ phr@se de test." -> "Ma phr@se de test." }
La confiance n'exclut pas le contrôle
Salut,
On peut faire tout simplement:
Mais si tu dois (ou si tu veux) utiliser regex:
Cordialement,
Dan
On peut faire tout simplement:
String phrase = "M@ phr@se de test."; phrase = phrase.replaceAll("@", "a"); System.out.println("\nphrase : " + phrase);
Mais si tu dois (ou si tu veux) utiliser regex:
String phrase = "M@ phr@se de test."; // compilation de la regex avec le motif : "@" Pattern p = Pattern.compile("@"); // création du moteur associé à la regex sur la chaîne "M@ phr@se de test." Matcher m = p.matcher(phrase); // remplacement de toutes les occurrences de "@" par "a" phrase = m.replaceAll("a"); System.out.println("\nphrase : " + phrase);
Cordialement,
Dan
Le problème avec tes codes Dan, c'est que "M@ phr@se de test." sera remplacé par "Ma phrase de test." alors que seuls les @ en fin de mots doivent être modifiés pour obtenir "Ma phr@se de test."
Remarque, on peut, comme je l'ai fait, coller toutes les instructions en une seule plutôt que créer des objets intermédiaires lorsque ceux-ci ne sont plus utilisés par la suite...
Remarque, on peut, comme je l'ai fait, coller toutes les instructions en une seule plutôt que créer des objets intermédiaires lorsque ceux-ci ne sont plus utilisés par la suite...
String ... = Pattern.compile(...).matcher(...).replaceAll(...);
En faite \b@ ne fonctionne pas, c'est @ n'est pas une "lettre" selon regex (Je l'ai appris sur un autre site). KX ton code fonctionne tant que le @ n'est pas à la fin de la chaine de caratère ...
Merci
Merci
En fait, avec $, on teste si @ est à la fin d'une ligne (avant un \n).
Pour tester si c'est la fin de la chaîne de caractères, ça devrait être \z ou \Z mais ça me génère une exception, donc je n'ai pas de solution pour ce cas là (sauf rajouter \n à la fin)
Par contre il pourrait être intéressant de rajouter le \b avant @ pour ne pas prendre en compte un @ isolé... Mais après tout dépend ce que tu veux faire, il faut regarder ce qui existe et tester.
Pour tester si c'est la fin de la chaîne de caractères, ça devrait être \z ou \Z mais ça me génère une exception, donc je n'ai pas de solution pour ce cas là (sauf rajouter \n à la fin)
Par contre il pourrait être intéressant de rajouter le \b avant @ pour ne pas prendre en compte un @ isolé... Mais après tout dépend ce que tu veux faire, il faut regarder ce qui existe et tester.
compile("(?=\\b)@(?=[\\W$])")
Bien sûr je le savais mais c'était un peu effacé de ma mémoire et j'ai mis deux minutes à ce que ça me revienne.
Je dis aussi ça pour souligner cette pratique. En ignorant à quoi servent certaines aptitudes des regex, on sous-exploite leur immenses possibilités.