2013-07-26 3 views
6
if (r.Contains("Word1" + "Word2")) 

Этот код проверяет, находятся ли «Word1» и «Word2» в строке вместе, например. ничего между ними, но как проверить, содержит ли строка эти два слова независимо от порядка или любых других слов между ними?C# Содержит несколько слов не вместе

например. Возвращает истину, если строка

Word1Word2 

Возвращает ложные

Word1 Text Word2 
+0

Вы попробовали соответствие шаблону Regex? – whoisthis

+0

Я серьезно сомневаюсь, что «r.Contains (« Word1 »+« Word2 »)' будет соответствовать 'Word1 Word2', поскольку он попытается найти' Word1Word2'. –

+0

Да, я пробовал это, но решение намного проще :) См. Ниже –

ответ

16

Просто проверить, что каждое слово содержится на r.

if (r.Contains("Word1") && r.Contains("Word2")) 

Этот код проверяет наличие "Word1"И"Word2" внутри исходной строки, независимо от его относительное положение внутри строки.

Edit:

Как @Alexei Левенков (+1) примечание на его комментарий, то же самое решение может быть достигнуто с помощью IndexOf метода.

if (r.IndexOf("Word1", StringComparison.InvariantCultureIgnoreCase) > -1 
    && r.IndexOf("Word2", StringComparison.InvariantCultureIgnoreCase) > -1)) 
+0

Спасибо, что работает отлично! –

+0

Но это не докажет Word1 Text Word2 как false – whoisthis

+1

@bjoshi OP говорит, что возврат 'false' на нем является проблемой с его оригинальным решением. – dasblinkenlight

4

Вы можете использовать && оператор для этого:

if (r.Contains("Word1") && r.Contains("Word2")) 

Обратите внимание, что это было бы проверить, что оба слова есть в любом заказ. Если вы должны убедиться, что первое слово предшествует второму, получаем индексы каждого слова, и проверить, что индекс первого слова ниже показателя второй:

var ind1 = r.IndexOf("Word1"); 
var ind2 = r.IndexOf("Word2"); 
if (ind1 >= 0 && ind2 > ind1) { 
    ... 
} 
+0

Как и выше, это отлично работает! –

5

Убедитесь, что каждое слово содержится в строке:

if (r.Contains("Word1") && r.Contains("Word2"))) 

Если это то, что вы часто, вы можете улучшить читаемость (ИМО) и лаконичность, сделав метод расширения:

public static bool ContainsAll(this string source, params string[] values) 
{ 
    return values.All(x => source.Contains(x)); 
} 

Используется как:

"Word1 Text Word2".ContainsAll("Word1", "Word2") // true 
Смежные вопросы