2012-10-31 4 views
0

J'ai une chaîneComment trouver l'ensemble des motifs de chaînes correspondants dans Java?

   "yes 12 /12 /yes /n 
       yes 12 /12 /yes " 

Comment puis-je vérifier que chaque fois que je « oui » dans la chaîne, j'ai un correspondant «/oui » et même, chaque fois que j'ai « 12 », j'ai un correspondant "/ 12"? Par exemple, si la chaîne comme

   "yes 12 /12 /yes /n 
       yes 12 /12 " 

Il devrait me donner une erreur disant erreur dans la ligne 2, puis passer à la lecture du reste du fichier.

+0

Est-ce une entrée acceptable? 'yes 12/yes/12' (donc est-il nécessaire que l'entrée soit bien formée comme lors de l'utilisation des parenthèses, ou non?) – ppeterka

+0

Voulez-vous cela pour seulement 12 et oui? Qu'avez-vous essayé? –

+0

Utilisation de regex et de backreferences? '[A-Za-z0-9] *? \\\ 1' ou quelque chose peut-être? –

Répondre

0

utilisation String.contains() méthode

String s= "yes 12 /12 /yes /n" 
if(s.contains("yes") && s.contains("/yes")){ 
    sysout("yes"); 
} 

faire la même chose pour toute autre paire :)

0

Vous devez d'abord obtenir une liste de tous les mots. Ensuite, pour chaque mot, essayez de voir si/mot est contenu.

String s = "12 a /12"; 
List<String> list = Arrays.asList(s.split("\\s")); 
for (String value : list) { 
    if (list.contains("/" + value)) { 
    System.out.println("Does contain"); 
    } else { 
    System.out.println("Doesn't contain"); 
    } 
} 
0

Vous pouvez utiliser la méthode contains dans String classe:

String str = ""yes 12 /12 /yes /n"; 
boolean isOk = str.contains("yes") && str.contains("/yes"); // isOk = true 

str = "yes 12 /12 "; 
isOk = str.contains("12") && str.contains("/12") // isOk = false 
0

Vous pouvez utiliser une récursivité pour trouver les balises et la balise de fermeture correspondante:

public class TagMatching { 
    public static void main(String[] args) { 
     List<String> lines = Arrays.asList("yes 12 /12 /yes /n", 
              "yes 12 /12 /yes", 
              "yes 12 a b /12 /yes", 
              "yes 12 c /12 /yes"); 
     for (String line : lines) { 
      boolean valid = validate(Arrays.asList(line.split(" "))); 
      System.out.println("valid = " + valid); 
     } 
    } 

    public static boolean validate(List<String> tags) { 
     if (tags.size() == 0) { 
      return true; 
     } 

     String first = tags.get(0); 
     String last = tags.get(tags.size() - 1); 
     if (last.equals("/" + first)) { 
      return validate(tags.subList(1, tags.size()-1)); 
     } 

     return false; 
    } 
} 
Questions connexes