Verifier une expression de la forme (xxxxxxx;xxxxxxx;xxxxx)

Résolu
nsrms Messages postés 3 Date d'inscription dimanche 15 juin 2014 Statut Membre Dernière intervention 24 juin 2014 - 15 juin 2014 à 22:37
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 15 juin 2014 à 22:57
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.

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
Modifié par KX le 15/06/2014 à 23:02
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
0
Rejoignez-nous