[java] Méthode

Fermé
Century - 12 juin 2006 à 18:26
 Century - 13 juin 2006 à 09:07
Bonjour,

j'ai un souci concernant le codage des méthodes car je ne sais pas comment m'y prendre.

Pourriez-vous m'aider

Merci

import java.util.regex.Pattern;

public interface QueryFactory {
 
  public Query query(CharSequence word);
  
  public Query query(Pattern pattern);
  
  public Query or(Query query1,Query query2);
  
  public Query and(Query query1,Query query2);
}


la classe qui l'implémente
public class QueryFacoryImpl implements QueryFactory {
 
  public Query query(CharSequence word) {
     // construction d'un objet query en fonction de word
     //return query;
  }
  
  public Query query(Pattern pattern) {
     // construction d'un objet query en fonction de pattern
     //return query;
  }
  
  public Query or(Query query1,Query query2) {
     // construction d'un objet query en fonction de query1 et query2
     //return query;
  }
  
  public Query and(Query query1,Query query2) {
     // construction d'un objet query en fonction de query1 et query2
     //return query;
  }
}
A voir également:

2 réponses

choubaka Messages postés 39375 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 14 avril 2024 2 100
13 juin 2006 à 07:44
salut

je comprends pas bien ce que tu veux qu'on fasse ...

tu veux qu'on écrive ton code ???

il manque beaucoup trop d'éléments pour qu'on puisse le faire

0
Bonjour,

Désolé, c'est vrai que j'ai mis très peu d'éléments pour être aidé

J'avais codé un exo semblable à celui qui m'est demandé de faire, mais je n'arrive pas à faire les modifications qui s'imposent

J'aurais principalement besoin d'aide concernant les méthodes Query et QueryFactory (qui permettent de faire la recherche) que je n'arrive pas à adapter

L'exo consiste à chercher des mots ou expressions régulières dans un fichier en utilisant le ET(&) et le Ou(|) .

Si vous pouviez m'aider s'il vous plait car j'essaye sans succès

Merci


Les quelques interfaces à implémenter(je ne mets que celles qui me posent problèmes)

Cette interface sert lancer la recherche
public interface Query {
  public Iterable<? extends Result> execute();

  public Iterable<? extends Result> execute(int maxCount);
}


Cette interface sert à utiliser les &, |, les expressions rationnelles ou les expressions "simples"
import java.util.regex.Pattern;

public interface QueryFactory {
 
  public Query query(CharSequence word);
  
  public Query query(Pattern pattern);
  
  public Query or(Query query1,Query query2);
  
  public Query and(Query query1,Query query2);
}



Ce que j'avais codé mais qu'il faut adapter
je tasse un peu le code dans mon post pour des raisons de place...)

J'ai une interface IMatcher qui se charge de dire si le texte donné est "bon" :
public interface IMatcher
{
	public boolean matches(String value);
}


Ensuite j'ai plusieurs Matchers spécialisés qui implémentent cette interface. Certains sont des matchers "simples" (qui travaillent sur une simple chaîne de référence) :
public class ContainsMatcher implements IMatcher
{
	private final String reference;	
	
	public ContainsMatcher(String reference)
	{	this.reference = reference;
	}

	public boolean matches(String value)
	{	return value.contains(reference);
	}
}


Et certains sont "composites" (ils utilisent d'autres matchers pour déterminer si le texte est "bon") :
public class AndMatcher implements IMatcher
{
	private final IMatcher matcher1;
	private final IMatcher matcher2;

	public AndMatcher(IMatcher matcher1, IMatcher matcher2)
	{
		this.matcher1 = matcher1;
		this.matcher2 = matcher2;
	}

	public boolean matches(String value)
	{	return ( matcher1.matches(value) && matcher2.matches(value) );
	}
}


Ensuite, j'ai une MatcherFactory, à qui on donne l'expression de recherche ("& titi toto"), et qui se charge de l'analyser et de construire la hiérarchie des Matchers correspondante :
public class MatcherFactory
{
	// C'est la méthode publique que notre programme va appeler
	public static IMatcher createMatcher(String pattern)
	{
		ArrayList<String> expList = new ArrayList<String>(Arrays.asList(pattern.split("\\s+")));
		return getSpecializedMatcher(expList);
	}
		
	// Méthode récursive, qui lit le premier élément de la liste des expressions, et
	// renvoie le Matcher correspondant.
	private static IMatcher getSpecializedMatcher(List<String> expList)
	{
		String exp = expList.remove(0);
		if ("&".equals(exp))
		{
			IMatcher operand1 = getSpecializedMatcher(expList);
			IMatcher operand2 = getSpecializedMatcher(expList);
			return new AndMatcher(operand1, operand2);
		}
		else if ("|".equals(exp))
		{
			IMatcher operand1 = getSpecializedMatcher(expList);
			IMatcher operand2 = getSpecializedMatcher(expList);
			return new OrMatcher(operand1, operand2);
		}
		else if (exp.startsWith("@"))
		{	return new RegexMatcher(exp.substring(1));
		}
		else if (exp.startsWith("!"))
		{	return new ExactMatcher(exp.substring(1));
		}
		else
		{	return new ContainsMatcher(exp);
		}		
	}
}
0