Search code examples
c#.netcontains

Get only Whole Words from a .Contains() statement


I've used .Contains() to find if a sentence contains a specific word however I found something weird:

I wanted to find if the word "hi" was present in a sentence which are as follows:

The child wanted to play in the mud

Hi there

Hector had a hip problem

if(sentence.contains("hi"))
{
   //
}

I only want the SECOND sentence to be filtered however all 3 gets filtered since CHILD has a 'hi' in it and hip has a 'hi' in it. How do I use the .Contains() such that only whole words get picked out?


Solution

  • You could split your sentence into words - you could split at each space and then trim any punctuation. Then check if any of these words are 'hi':

    var punctuation = source.Where(Char.IsPunctuation).Distinct().ToArray();
    var words = sentence.Split().Select(x => x.Trim(punctuation));
    var containsHi = words.Contains("hi", StringComparer.OrdinalIgnoreCase);
    

    See a working demo here: https://dotnetfiddle.net/AomXWx