String包含另外两个字符串

时间:2013-04-16 12:46:29

标签: c# string contains

如果字符串包含2个或更多单词,是否可以找到包含函数? 这就是我想要做的事情:

string d = "You hit someone for 50 damage";
string a = "damage";
string b = "someone";
string c = "you";

if(d.Contains(b + a))
{   
    Console.WriteLine(" " + d);
    Console.ReadLine();
}

当我运行它时,控制台窗口只是在没有显示任何内容的情况下快速关闭。

另一个问题是:如果我想要添加多少伤害,那么最简单的方法是获取该数字并将其变为TryParse

17 个答案:

答案 0 :(得分:40)

最好只调用Contains两次或制作自己的扩展方法来处理此问题。

string d = "You hit someone for 50 damage";
string a = "damage";
string b = "someone";
string c = "you";

if(d.Contains(a) && d.Contains(b))
{
   Console.WriteLine(" " + d);
   Console.ReadLine();
}

就你的另一个问题而言,你可以构建一个正则表达式来解析字符串以找到50,或者如果字符串总是相同的,只需根据空格分割它并获得第5部分。

答案 1 :(得分:8)

public static class StringExtensions
{
    public static bool Contains(this string s, params string[] predicates)
    {
        return predicates.All(s.Contains);
    }
}

string d = "You hit someone for 50 damage";
string a = "damage";
string b = "someone";
string c = "you";

if (d.Contains(a, b))
{
    Console.WriteLine("d contains a and b");
}

答案 2 :(得分:6)

那是因为if语句返回false,因为d不包含b + a,即“someonedamage”

答案 3 :(得分:3)

您是否在寻找包含一定数量单词或包含特定单词的字符串?你的榜样导致后者。

在这种情况下,您可能希望查看解析字符串或至少使用正则表达式 学习正则表达式 - 在编程中它将有效1000倍。我不能太强调这一点。使用contains和if语句会很快变成一团糟。

如果你只想计算单词,那么:

string d = "You hit someone for 50 damage";  
string[] words = d.Split(' ');  // Break up the string into words
Console.Write(words.Length);  

答案 4 :(得分:1)

这是因为d 包含b + a(即"someonedamage"),因此应用程序才会终止(因为您的Console.ReadLine();是在if区块内。

答案 5 :(得分:1)

您可以使用linq编写扩展方法。

public static bool MyContains(this string str, params string[] p) {
 return !p.Cast<string>().Where(s => !str.Contains(s)).Any();
}
编辑(thx to sirid):

public static bool MyContains(this string str, params string[] p) {
 return !p.Any(s => !str.Contains(s));
}

答案 6 :(得分:1)

如果您有单词列表,可以执行以下方法:

public bool ContainWords(List<string> wordList, string text)
{
   foreach(string currentWord in wordList)
      if(!text.Contains(currentWord))
         return false;
   return true;
}

答案 7 :(得分:1)

所以你想知道一个字符串是否包含另外两个字符串?

您可以使用此扩展名来指定比较:

public static bool ContainsAll(this string text, StringComparison comparison = StringComparison.CurrentCulture, params string[]parts)
{
    return parts.All(p => text.IndexOf(p, comparison) > -1);
}

以这种方式使用它(您也可以省略StringComparison):

bool containsAll = d.ContainsAll(StringComparison.OrdinalIgnoreCase, a, b);

答案 8 :(得分:1)

使用代码d.Contains(b + a),您可以检查“您是否因某人受到50点伤害”而包含“someonedamage”。这(我猜)你不想要。

+结束了两个b和a的字符串。

您必须通过

进行检查
if(d.Contains(b) && d.Contains(a))

答案 9 :(得分:1)

string d = "You hit someone for 50 damage";
string a = "damage";
string b = "someone";
string c = "you";

if(d.Contains(a) && d.Contains(b))
{
    Console.WriteLine(" " + d);
}
Console.ReadLine();

答案 10 :(得分:1)

您的b + a等于"someonedamage",因为您的d不包含该字符串,您的if语句会返回false并且不会运行部分。

Console.WriteLine(" " + d);
Console.ReadLine();

你可以更有效地控制它;

bool b = d.Contains(a) && d.Contains(b);

这是DEMO

答案 11 :(得分:1)

因为b + a ="someonedamage",请尝试以下方法:

if (d.Contains(b) && d.Contains(a))
{  
    Console.WriteLine(" " + d);
    Console.ReadLine();
}

答案 12 :(得分:0)

我刚检查了包含的空格,以检查字符串是否包含2个或更多单词。

string d = "You hit someone for 50 damage";
string a = "damage";
string b = "someone";
string c = "you";

bool a = ?(d.contains(" ")):true:false;

if(a)
{
 Console.WriteLine(" " + d);
}

Console.Read();

答案 13 :(得分:0)

string d = "You hit ssomeones for 50 damage";
string a = "damage";
string b = "someone";

if (d.Contains(a) && d.Contains(b))
{
    Response.Write(" " + d);

}
else
{
    Response.Write("The required string not contain in d");
}

答案 14 :(得分:0)

那么你真正追求的是什么?如果你想确保某些东西遭到破坏(在这种情况下),你为什么不使用string.Format

/

通过这种方式,您可以获得正在寻找的伤害限定符,并且能够计算其他部分的伤害限定符。

答案 15 :(得分:0)

 class Program {
          static void Main(String[] args) {
             // By using extension methods
             if ( "Hello world".ContainsAll(StringComparison.CurrentCultureIgnoreCase, "Hello", "world") ) 
                Console.WriteLine("Found everything by using an extension method!");
             else 
                Console.WriteLine("I didn't");

             // By using a single method
             if ( ContainsAll("Hello world", StringComparison.CurrentCultureIgnoreCase, "Hello", "world") )
                Console.WriteLine("Found everything by using an ad hoc procedure!");
             else 
                Console.WriteLine("I didn't");

          }

          private static Boolean ContainsAll(String str, StringComparison comparisonType, params String[] values) {
             return values.All(s => s.Equals(s, comparisonType));
          }    
       }

       // Extension method for your convenience
       internal static class Extensiones {
          public static Boolean ContainsAll(this String str, StringComparison comparisonType, params String[] values) {
             return values.All(s => s.Equals(s, comparisonType));
          }
       }

答案 16 :(得分:0)

    public static bool In(this string str, params string[] p)
    {
        foreach (var s in p)
        {
            if (str.Contains(s)) return true;
        }
        return false;
    }