16

如果字符串包含 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什么?

4

17 回答 17

43

你最好只调用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 部分。

于 2013-04-16T12:48:20.453 回答
10
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");
}
于 2013-04-16T12:57:40.963 回答
6

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

于 2013-04-16T12:49:18.737 回答
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);  
于 2013-04-16T13:07:03.323 回答
2

使用代码d.Contains(b + a)检查“You hit someone for 50 damage”是否包含“someonedamage”。而这个(我猜)你不想要。

+ 连接 b 和 a 的两个字符串。

你必须检查它

if(d.Contains(b) && d.Contains(a))
于 2013-04-16T12:51:17.693 回答
1

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

于 2013-04-16T12:48:26.857 回答
1

因为b + a ="someonedamage",试试这个来实现:

if (d.Contains(b) && d.Contains(a))
{  
    Console.WriteLine(" " + d);
    Console.ReadLine();
}
于 2013-04-16T12:49:58.280 回答
1

Your b + ais equal "someonedamage",因为 yourd不包含该字符串,所以您的if语句返回false并且不运行以下部分。

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

您可以更有效地控制它;

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

这是一个DEMO.

于 2013-04-16T12:50:06.337 回答
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();
于 2013-04-16T12:50:20.823 回答
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);
于 2013-04-16T12:51:25.367 回答
1

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

public bool ContainWords(List<string> wordList, string text)
{
   foreach(string currentWord in wordList)
      if(!text.Contains(currentWord))
         return false;
   return true;
}
于 2013-04-16T12:51:56.940 回答
1

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

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

编辑(感谢 sirid):

public static bool MyContains(this string str, params string[] p) {
 return !p.Any(s => !str.Contains(s));
}
于 2013-04-16T12:52:54.977 回答
0

我刚刚检查了 contains 中的空格以检查字符串是否包含 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();
于 2013-04-16T13:28:30.043 回答
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");
}
于 2014-09-03T09:20:49.393 回答
0

那么你真正追求的是什么?如果您想确保某物受到损坏(在这种情况下),您为什么不使用string.Format

string a = string.Format("You hit someone for {d} damage", damage);

这样,您就有能力获得您正在寻找的损坏限定符,并且能够为其他部分计算它。

于 2015-05-08T13:48:54.270 回答
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));
          }
       }
于 2016-11-25T21:17:11.840 回答
0
    public static bool In(this string str, params string[] p)
    {
        foreach (var s in p)
        {
            if (str.Contains(s)) return true;
        }
        return false;
    }
于 2017-03-14T06:51:17.780 回答