2011-05-11 8 views
4

C# 또는 VB.NET 제안을 환영합니다.LINQ가있는 문자열에서 단어 찾기

Dim someText = "Stack Over Flow Community" 
    Dim someWord = "Over Community" 

    If someText.Contains(someWord) Then 
     Response.Write("Word found.") 
    Else 
     Response.Write("No word found.") 
    End If 


Function Contains looks only for next words from left to right. 

someText.Contains("Over Stack") returns False 
someText.Contains("Stack Community") returns False 

내가 문자열에 존재하는 단어가있는만큼 True를 반환하는 모든 이들의 원하는 :

나는 다음과 같은 코드가 있습니다.

문자열의 단어 위치에 관계없이 대소 문자를 구분하는 기존 기능이 있습니까?

+0

일부 문제는 존재하지 않는 특정 문자열을 찾는 것입니다. "Over"또는 "Stack"을 찾고 있지 않다면, "Over Stack"을 찾고 있습니다. 한 번에 한 단어 씩 검색하거나 EXACT 문자열과 일치시킬 수 있습니다. 찾으려는 문자열을 분할해야합니다. –

답변

5
words.Split(' ').Any(someText.Contains) 
+2

메소드 그룹 변환을 사용하면 인수를 생략하고'모두 (s.contains) '만 쓸 수 있습니다. –

+0

@Brian 감사합니다. 항상이 것을 잊어 버려야합니다. – Snowbear

4

someText.Split(' ').Intersect(someWord.Split(' ')).Any();

+0

Mine은 텍스트에 단어가 있으면 true를 반환하고, @ Snowbear 's는 모든 텍스트가 있으면 true를 반환합니다. @ Snowbear는 someText를 분할하지 않기 때문에 아마 더 좋습니다. –

1
public static class StringExtension 
{ 
    public static bool ContainsWord(this string source, string contain) 
    { 
     List<string> sourceList = source.Split(' ').ToList(); 
     List<string> containList = contain.Split(' ').ToList(); 

     return sourceList.Intersect(containList).Any(); 
    } 
} 


string someText = "Stack Over Flow Community"; 
var res = someText.ContainsWord("Over Stack");   // return true 
var res1 = someText.ContainsWord("Stack Community"); // return true 
var res2 = someText.ContainsWord("Stack1 Community"); // return false 
+1

Split은 (LINQ가 쿼리 할 수있는) 배열을 반환합니다. 목록으로 만들 이유가 있습니까? –

1

Linq의 솔루션에 대한 대안은 확장 방법이 될 것입니다 :

public static bool ContainsAllWords(this string input, string search) 
{ 
    foreach (string word in search.split(' ', StringSplitOptions.RemoveEmptyEntries)) 
    { 
     if (!input.Contains(word)) 
      return false; 
    } 
    return true; 
} 

사용법 :

string test = "stack overflow"; 
string searchPhrase = "overflow stack"; 
Console.WriteLine(test.ContainsAllWords(searchPhrase)); 

재사용 성 및 차종에 대한 더 나은 당신의 코드 더 많은 선언적 (imho).