顺序组合字符串的字符串

时间:2016-12-14 08:37:21

标签: c# string combinations sequence

我很难过。我想知道字符串的顺序顺序是否有任何组合可用。比如我要匹配的字符串是

string somevar = "rat";

然后如果另一个字符串包含“rat”,“at”,“ra”或“r”,“a”,“t”,它应该返回false。

我只能考虑为我可以手动找到的每个序列创造条件。但我相信可以轻松找到它。我看了Implement a function that prints all possible combinations of the characters in a string,但它没有做我想要的。

我很抱歉,如果这不是很清楚,但我想检查一下

的情况
 if(somevar == "rat" || somevar == "at" || somevar == "ra" || somevar == "r" || somevar == "a" || somevar == "t")
 {
      \\do something
 }

3 个答案:

答案 0 :(得分:4)

如果包含单个字符串足够,则不需要检查所有子字符串:

bool containsAnyChar = somevar.Intersect("rat").Any();

这是有效的,因为字符串实现了IEnumerable<char>(是一组字符)。

答案 1 :(得分:3)

您需要一种确定所有子串的方法

public static IEnumerable<string> GetAllSubStrings(string input, int length)
{
    for (var i = 0; i < input.Length - length + 1; i++)
    {
        yield return input.Substring(i, length);
    }
}

然后你可以创建一个包含所有组合的列表

string somevar = "rat";
List<string> subStrings = new List<string>();
for (int i = 0; i < somevar.Length; i++)
{
    subStrings.AddRange(GetAllSubStrings(somevar, i + 1));
}
// subStrings = {"rat", "at", "ra", "r", "a", "t"}

并最终检查该列表中的其他字符串。

更新至您更新的问题:

//check "ra" 
string testItem = "ra";
bool contains = subStrings.Any(x => testItem == x);

答案 2 :(得分:-1)

string somevar = "rat";
string anotherString = "rat is there";
bool result = somevar.ToCharArray().Any(ch => anotherString.Contains(ch));