2010-01-06 6 views
3

Quelqu'un pourrait-il me dire comment remplacer la méthode contains() de HashSet pour utiliser une correspondance regex au lieu de simplement equals()?Substitution de la méthode HashSet Contient

Ou si pas de dérogation, comment puis-je ajouter une méthode pour utiliser un motif regex? Fondamentalement, je veux être capable d'exécuter regex sur un HashSet contenant des chaînes, et j'ai besoin de faire correspondre les sous-chaînes en utilisant regex.

Si ma méthode n'est pas appropriée, veuillez en suggérer d'autres.

Merci. :)

Répondre

5

Vous pouvez étendre une HashSet de la manière suivante:

public class RegExHashSet extends HashSet<String > { 
    public boolean containsRegEx(String regex) { 
     for(String string : this) { 
      if(string.matches(regex)) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 

Ensuite, vous pouvez l'utiliser:

RegExHashSet set = new RegExHashSet(); 
set.add("hello"); 
set.add("my"); 
set.add("name"); 
set.add("is"); 
set.add("tangens"); 

if(set.containsRegEx("tan.*")) { 
    System.out.println("it works"); 
} 
+0

Pourriez-vous me donner un code complet sur la façon d'étendre HashSet, puis initialiser un HashSet de la classe étendue? –

+0

J'ai ajouté un exemple. – tangens

+0

Merci beaucoup! : D –

2

Je suggère d'utiliser Google Collections, et en particulier, la méthode Sets.filter. Beaucoup plus facile que d'essayer de sous-classer une collection.

Questions connexes