如果字符串等于c#中字符串中包含的单词,如何完全检查?

时间:2017-12-10 22:31:51

标签: c# string search

也许这个问题有点困惑。 我将以更好的方式解释这一点 看这个代码

string myfirststring = "hello1,hello123,content";
string_2 = "ent";
if (myfirststring.Contains(string_2)){
    Console.WriteLine("Yes! this is included in the 1 string");
    //then check if string_2 is equal to the 3 element of 1 string: content
}

现在我想检查一下我包含的字符串" string_2"完全等于myfirststring的3个元素:content(在这种情况下不是因为值是ent而不是内容所以ent!= content) 那我怎么检查呢?

3 个答案:

答案 0 :(得分:5)

如果单词以逗号分隔,您可以执行以下操作:

var exactlyContained = myFirstString.Split(',').Any(w => w == string_2);

如果在任何其他情况下找到完全匹配true,则会返回false

更新

根据评论,您的字符串似乎包含由不同符号序列分隔的单词。也许你可以使用这种自定义拆分方法(你可以根据你的特定需求进行调整,我不需要提供很多信息):

public static IEnumerable<string> CustomSplit(this string s)
{
    var buffer = new StringBuilder();

    foreach (var c in s)
    {
        if (!char.IsLetterOrDigit(c))
        {
            if (buffer.Length > 0)
            {
                yield return buffer.ToString();
                buffer.Clear();
            }
        }
        else
        {
            buffer.Append(c);
        }
    }

    if (buffer.Length > 0)
        yield return buffer.ToString();
}

现在代码将是:

var exactlyContained = myFirstString.CustomSplit().Any(w => w == string_2);

答案 1 :(得分:1)

因为你的字符串没有指定的分隔符并且跟随你的示例字符串,我会减少所有非字母数字字符并重新创建你的myFirstString

string myFirstString = "hello1,hello123,content";
string yourSecondString = "ent";

首先我定义一个分隔符,我需要在末尾进行分割。

char delimiter = '#';

现在我创建一个新的StringBuilder来有效地添加找到的字符,并设置我想要检查的字符是否以非字母数字字符结束。

var firstStringBuilder = new StringBuilder();
char previousChar = delimiter;

准备完成后,我遍历字符串中的所有字符,并将所有字符添加到StringBuilder,并将所有非字母数字字符缩减为单词之间的单个分隔符。

foreach (char singleChar in myFirstString)
{
    if (Char.IsLetterOrDigit(singleChar))
    {
        firstStringBuilder.Append(singleChar);
        previousChar = singleChar;
    }
    else if(Char.IsLetterOrDigit(previousChar))
    {
        firstStringBuilder.Append(delimiter);
        previousChar = singleChar;
    }
}

完成循环后,我会检查是否有任何单词匹配yourSecondString

bool matched = firstStringBuilder.ToString()
                                 .Split(delimiter)
                                 .Any(str => string.Equals(str, yourSecondString));

答案 2 :(得分:1)

我知道出于性能原因通常不赞成,但正如你总是处理一个单词(而不是一个句子等),正则表达式使这个查找相对简单,例如。

// regex "\b" indicates a word boundary, so surrounding your lookup string with them ensures your expression matches the entire word 
if (Regex.IsMatch(myfirststring, $"\b{string_2}\b")){
    Console.WriteLine("Yes! this is included in the 1 string");
    //then check if string_2 is equal to the 3 element of 1 string: content
}

编辑:在if声明

上添加了缺少的结束括号