Recherche de mot avec caractéres '*' et '?'

BScrk Messages postés 18 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 16 novembre 2005 - 28 janv. 2004 à 10:13
tominfo Messages postés 93 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 30 janvier 2009 - 28 janv. 2004 à 23:21
>:) BScrk

Voila ma question:

je voilai savoir si il y avait (surement mais g pas trouvé)
un bout de code permettant de rechercher un mot dans une String
(ou String[] peut importe) en implémentant l'utilisation de caract spéciaux:

ex:
-----Test-----
toto
titi
tutu
atu
bitocu
...etc...
---------------

je cherche = *tu* -> réponce : tutu et atu
je cherche = t??* -> réponce : toto titi tutu
etc...

voila si vous en avez ça ferai bien plaiZ.

a toute.

2 réponses

BScrk Messages postés 18 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 16 novembre 2005
28 janv. 2004 à 12:25
>:) BScrk

REPONCE DE MOI MEME...

voila, j'ai pondu vit fai un code qui le fait

/*
* Classe StringPattern:
* teste si une String match avec une expression donnée contenant (ou non) certain
* caractéres JOKER.
* '*' : de 0 a n caractéres (n'importe lequel)
* '?' : 1 caractére (n'importe lequel)
*
* @autor Benevolo Luca
*
* utilisation:
* création d'une expression filtre
* StringPattern tTest = new StringPattern(*EXPRESSION*);
* exemple:
* StringPattern tTest = new StringPattern("a?b*t");
* puis application du filtre a une string tTest.matchs(**chaine a tester**)
*
* ou testMatchsExpression(**chaine a tester**,*EXPRESSION*);
*
* @autor Benevolo Luca
*/

class StringPattern
{

private String pattern;

public StringPattern(String thePattern)
{
pattern = thePattern;
}

public StringPattern()
{
}

public void setPattern(String thePattern) { pattern = thePattern; }
public String getPattern() { return pattern; }

public boolean testMatchsExpression(String word , String sPattern)
{
pattern = sPattern;
return matchsR(word,sPattern);
}

public boolean matchs(String word)
{
return matchsR(word,pattern);
}

private boolean matchsR(String word , String sPattern)
{
if (sPattern.length()==0) return (word.length()==0);

if ((word.length()==0))
{
if (sPattern.charAt(0)=='*') return matchsR(word,sPattern.substring(1,sPattern.length()));
if (sPattern.charAt(0)=='?') return matchsR(word,sPattern.substring(1,sPattern.length()));
else return false;
}
if ( ( word.charAt(0) sPattern.charAt(0) ) || (sPattern.charAt(0) '?') )
return matchsR(word.substring(1,word.length()),sPattern.substring(1,sPattern.length()));

else if (sPattern.charAt(0) == '*')
{
if (sPattern.length() == 1) return true;

if (sPattern.charAt(1)=='*' && sPattern.charAt(1)=='?')
return matchsR(word,sPattern.substring(1,sPattern.length()));

else
{
int nextEndWordIndice = 1;
while ( (nextEndWordIndice < sPattern.length())
&& (sPattern.charAt(nextEndWordIndice)!='*')
&& (sPattern.charAt(nextEndWordIndice)!='?')
) nextEndWordIndice++;
int nextCharIndex = word.indexOf(sPattern.substring(1,nextEndWordIndice));
if ( nextCharIndex != -1)
return matchsR(word.substring(nextCharIndex,word.length()),sPattern.substring(1,sPattern.length()));
}

}
return false;

}

public static void main(String args[]) {

StringPattern tTest = new StringPattern("*r?o*");

System.out.println(tTest.matchs("ro"));
System.out.println(tTest.matchs("rao"));
System.out.println(tTest.matchs("raao"));

System.out.println(tTest.testMatchsExpression("albert","?l*bert"));

}


}
0
tominfo Messages postés 93 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 30 janvier 2009
28 janv. 2004 à 23:21
T'as regarder la méthode matches(String regex) où regex est une RegularExpression (cf javadoc)?
0
Rejoignez-nous