Disons que j'ai quelque chose comme ceci:
pattern = new Pattern[6];
pattern[0] = Pattern.compile("^\\s*(NOM\\:\\s*)\\s(\\w+)");
pattern[1] = Pattern.compile("^\\s*(ÂGE\\:\\s*)\\s(\\d+)");
pattern[2] = Pattern.compile("^\\s*(ADRESSE\\:\\s)(\\w+)");
pattern[3] = Pattern.compile("^\\s*(DATE D'ANNIVERSAIRE\\:\\s)(\\d+)\\:(\\d+)\\:(\\d+)");
pattern[4] = Pattern.compile("(?=\\s*\\*)(^\\**)");
pattern[5] = Pattern.compile("\\S+|[^\\s*.+\\s*]");
Le but du pattern 4 est de capturer les commentaires suivis de * et le pattern 5 est de capturer tout le reste que les autres patterns ne peuvent pas. Ensuite, le Matcher dp sert à vérifier si le pattern est celui attendu à partir du LookAhead en renvoyant vrai ou faux.
public boolean lookAhead () {
while ((line = buff.readLine()) != null) {
Pattern different = Pattern.compile("^[^(\\s*NOM.*)(\\s*ÂGE.*)(\\s*ADRESSE.*)(\\s*DATE D'ANNIVERSAIRE.*)]");
Matcher comment = pattern[4].matcher(line);
Matcher diff = different.matcher(line);
Matcher name = pattern[0].matcher(line);
if (comment.find() || different.find() /*|| name.find()*/)
continue;
Matcher dp = pattern[0].matcher(line);
dpla = dp.find();
break;
}
}
return dpla;
}
Les commentaires sont ignorés et toutes les erreurs aléatoires comme: "feifiejfie" le seraient aussi. Cependant, si le texte est quelque chose comme "NOM 7987997 GSGSGE 456", cela devrait être considéré comme une erreur mais ce n'est pas le cas. Si name.find est décommenté, cela fonctionnera toujours, cependant, cela ne renverra jamais faux.