Verifier une expression de la forme (xxxxxxx;xxxxxxx;xxxxx) [Résolu]

Signaler
Messages postés
3
Date d'inscription
dimanche 15 juin 2014
Statut
Membre
Dernière intervention
24 juin 2014
-
Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
-
Bonjour,
je veut verifier si la ligne en entrée contient une expression de la forme (xxxx;xxxx;xxxx) avec xxxx ensemble de caractère(peut etre cractère spéciale ou un numero ou n'importe quel caractère . pour cela j'ai ecrit le code suivant
public static boolean isforme(String chaine)
{
Pattern pattern = Pattern.compile(".*(.*;.*;.*).*");
Matcher matcher = pattern.matcher(chaine);
return(matcher.find());
}

mais le problème qu'il parait faux mais j'arrive pas à detecter le problème.
j'espère que vous pouvez m'aider et merci d'avance.
A voir également:

1 réponse

Messages postés
16365
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 juin 2021
122
Bonjour,

Il y a des caractères spéciaux dans les expressions régulières, et les parenthèses en font partis, il faut donc les échapper avec des \\

De plus, dans ton exemple tu as 3 points virgules, mais dans ton expression tu n'en as que 2. Il faut donc avoir le bon compte.
Et pour cela il faut aussi s'assurer que dans tes .* tu n'ais pas un point virgule qui se promène, pour ça il faudrait plutôt utiliser [^;]*

J'en profite pour utiliser directement la méthode matches de la classe String plutôt que de passer par un Pattern/Matches superflue.

public class Test
{
    public static boolean isforme(String chaine)
    {
        return chaine.matches("\\([^;]*;[^;]*;[^;]*\\)");
    }
    
    public static void main(String[] args)
    {
        System.out.println(isforme("(xxxxxxx;xxxxxxx;xxxxx)"));
    }
}
La confiance n'exclut pas le contrôle