2017-06-03 2 views
0
import java.util.ArrayList; 
import java.util.List; 


public class ListString { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 


     List list=new ArrayList(); 
     list.add("Patter1 -> Assert1"); 
     list.add("Patter2 -> Assert2"); 
     list.add("Patter3 -> Assert3"); 
     list.add("Patter4 -> Assert4"); 
     list.add("Patter5 -> Assert5"); 


     for (int i = 0; i < list.size(); i++) { 


      String string = (String)list.get(i);  
      System.out.println(string); 
      StringBuffer stringAppended=new StringBuffer(); 
      String[] split = string.split(" -> "); 
      for (int k = 0; k < split.length; k++) { 
       stringAppended.append(split[k]).append(" && "); 
       // System.out.println(split[k]); 
      } 
      stringAppended.replace(stringAppended.length() - 3, stringAppended.length(), " "); 
      System.out.println(stringAppended); 

      if(string.contains(stringAppended)){ 

       System.out.println("INSIDE IF LOOP"); 

      } 

     } 

    } 

} 

Dans le code ci-dessus, je suis en train de vérifier Patter1 et Assert1 sont présents dans le stringPath, chemin de chaîne ci-dessous a tendanceComment faire && comme opérateur logique dans la chaîne

Patter1 -> Assert1 
Patter2 -> Assert2 
Patter3 -> Assert3 
Patter4 -> Assert4 
Patter5 -> Assert5 

I je essaie de le faire par le code ci-dessous

if(stringPath.contains(stringAppended)){ 

       System.out.println("INSIDE IF LOOP"); 

      } 

Je fais application dynamique où stringAppended aura Patter1 & & Assert1, stringAppended aura plus & & comme ça dans ma demande, Comment pouvons-nous faire & & comme l'opérateur logique ici, actuellement il est le traitement sous forme de chaîne normale

+0

Ne pas utiliser * génériques premières *. Passez à 'Liste list = new ArrayList <>();'. De cette façon, vous n'aurez pas besoin de lancer 'String'. --- Aussi, pourquoi ne pas utiliser une boucle 'for' améliorée, également appelée boucle for-each? – Andreas

+0

Si c'est toujours l'opérateur && - vous n'en avez pas besoin. Vous pouvez ajouter les chaînes à une liste et écrire une fonction qui vérifie la chaîne par rapport à la liste entière. Si vous avez vraiment besoin d'être dynamique, vous pourriez penser à utiliser le javascript Nashorn moteur – Turo

Répondre

0

diviser en deux expressions booléennes:

if(stringPath.contains("Patter1") && stringPath.contains("Assert1")){ ... }

+0

stringAppended sera dynamique, il est dynamique et ont && avec en ce que – Ganesh

1

Construire une chaîne avec && en elle ne tourne pas comme par magie dans une expression qui peut être évaluée. C'est toujours juste une chaîne avec du texte.

Si vous avez une liste de mots et que vous devez vérifier si un texte d'entrée contient tous ces mots, vous devez faire deux choses:

  • boucle à travers les mots et les vérifier un à un temps.

  • Assurez-vous seulement correspondre « mots », par exemple Si le mot est is, vous ne voulez pas faire correspondre this.

  • (facultatif) Faire correspondre les mots de manière insensible à la casse, par ex. Le mot This correspond également this.

Pour faire tout cela, l'utilisation d'une expression régulière serait la plus simple, par ex.

public static boolean containsAllWords(String input, List<String> words) { 
    for (String word : words) { 
     String regex = "(?i)\\b(?:" + Pattern.quote(word) + ")\\b"; 
     if (! Pattern.compile(regex).matcher(input).find()) 
      return false; 
    } 
    return true; 
} 

test

System.out.println(containsAllWords("This was a test.", Arrays.asList("was", "test"))); 
System.out.println(containsAllWords("This was a test.", Arrays.asList("is", "test"))); 

Sortie

true 
false 
+0

Kudos !!!!!! Ce travail comme prévu pour mon exigence – Ganesh