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

Mã này kiểm tra xem "Word1" và "Word2" có nằm trong chuỗi không, ví dụ: không có gì ở giữa chúng nhưng làm thế nào để kiểm tra xem chuỗi có chứa hai từ đó bất kể thứ tự hay bất kỳ từ nào khác ở giữa chúng không?C# Chứa nhiều từ không cùng nhau

ví dụ: trả về true nếu chuỗi là

Word1Word2 

Returns sai

Word1 Text Word2 
+0

bạn đã thử kết hợp mẫu Regex chưa? – whoisthis

+0

Tôi nghiêm túc nghi ngờ 'r.Contains (" Word1 "+" Word2 ")' sẽ khớp 'Word1 Word2' vì nó sẽ cố gắng tìm' Word1Word2'. –

+0

Có, tôi đã thử điều đó, nhưng giải pháp đơn giản hơn nhiều :) Xem bên dưới –

Trả lời

16

Chỉ cần xác minh rằng mỗi từ là chứa trên r.

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

Mã này kiểm tra cho sự tồn tại của "Word1""Word2" bên trong chuỗi gốc, bất kể vị trí tương đối của nó bên trong chuỗi.

Edit:

Như @Alexei Levenkov (+1) lưu ý đối với nhận xét của mình, cùng một giải pháp có thể đạt được bằng phương pháp IndexOf.

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

Cảm ơn điều này hoạt động hoàn hảo! –

+0

Nhưng điều này sẽ không chứng minh Word1 Text Word2 là false – whoisthis

+1

@bjoshi OP nói rằng trả về 'false' trên đó là một vấn đề với giải pháp ban đầu của anh ta. – dasblinkenlight

4

Bạn có thể sử dụng một nhà điều hành && cho rằng:

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

Lưu ý rằng điều này sẽ kiểm tra xem cả hai từ đều có mặt trong bất kỳ gọi món. Nếu bạn phải đảm bảo rằng từ đầu tiên đứng trước chữ thứ hai, hãy lấy chỉ mục của mỗi từ và kiểm tra xem chỉ mục của từ đầu tiên có thấp hơn chỉ mục của từ thứ hai hay không:

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

Như trên, tác phẩm này hoàn toàn cổ vũ! –

5

Kiểm tra cho mỗi từ được chứa trong chuỗi:

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

Nếu đây là một cái gì đó bạn thường xuyên, bạn có thể cải thiện khả năng đọc (IMO) và conciseness bằng cách làm cho một phương pháp khuyến nông:

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

Được sử dụng như:

"Word1 Text Word2".ContainsAll("Word1", "Word2") // true 
Các vấn đề liên quan