2014-07-23 5 views
0

J'ai une chaîne d'entrée qui contient un couple de termes de recherche pour trouver une ligne dans un texte incluant tous les termes de recherche.Dynamic AND conditions dans une instruction if

Par exemple:

String searchTerms = "java stackoverflow conditions"; 
String [] splittedTerm = searchTerms.split(" "); 

Les termes de recherche sont et systémiques:

if (textLine.contains(splittedTerm[0] && textLine.contains(splittedTerm[1]) && textLine.contains(splittedTerm[2])) start=true; 

Mais le nombre de termes de recherche est dynamique, il dépend Alwayse à la demande des utilisateurs ...

Donc, est-il possible d'utiliser l'instruction if en fonction du nombre de termes de recherche?

+1

Qu'en est-il de a, b, c ... d'où ils viennent? –

+0

L'égalité des chaînes n'est pas testée avec '=='. Et on dirait que vous voulez une boucle. –

+0

@ElliottFrisch Semble le code de simulation. –

Répondre

1

Vous devez faire une boucle à travers le String[] que vous obtenez après splitiing la chaîne: -

Tout d'abord ajouter tous les éléments que vous souhaitez comparer dans un tableau, puis itérer et comparer à travers le premier tableau et tableau retourné à partir de split(). Assurez-vous que les deux tableaux sont de même longueur

boolean flag=true; 
String searchTerms = "java stackoverflow conditions hello test"; 
String [] splittedTerm = searchTerms.split(" "); 

for(int i=0;i<splittedTerm.length;i++){ 

    if (!(textLine[i].equals(splittedTerm[i]))){ //textLine is the array containing String literals you want to compare. 
    flag=false; 
    } 

} 
start=flag; 
+0

merci! Je vais l'essayer – Ramses

1

vous pourriez faire une boucle qui itère sur tous les termes de recherche. Si un missmatch est trouvé, placez un drapeau et cassez la boucle. Au-dessous de la boucle, vous pouvez ensuite vérifier le drapeau, s'il est toujours vrai que tous vos termes de recherche correspondent.

boolean flag = true; 
for (String searchTerm : splittedTerm){ 
    if (!stringToSearch.contains(searchTerm) { 
     flag = false; 
     break; 
    } 
} 

if (flag) 
    all terms matched 
else 
    one or more terms did not match 
+0

merci. bonne idée. similaire à la solution mustafas – Ramses

Questions connexes