字符串包含另外两个字符串

本文关键字:字符串 两个 包含另 | 更新日期: 2023-09-27 18:09:39

是否可以让包含函数找到字符串是否包含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的最简单方法是什么?

字符串包含另外两个字符串

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

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");
}

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

您是在查找包含一定数量的单词还是包含特定的单词?你的例子指向后者。

在这种情况下,您可能希望研究解析字符串或至少使用正则表达式。
学习正则表达式-它将在编程中有用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);  

使用代码d.Contains(b + a),您可以检查"you hit someone for 50 damage"是否包含"someonedamage"。这(我猜)是你不想要的。

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

你必须通过

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

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

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

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

你可以更有效地控制这个

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

这是DEMO

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();

如果你有一个单词列表,你可以这样做:

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

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

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

编辑(谢谢):

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

因为b + a ="someonedamage",尝试这样实现:

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

你想知道一个字符串是否包含两个其他字符串?

你可以使用这个扩展,它也允许指定比较:

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);

我刚刚检查了contains中的空格,以检查字符串是否有两个或两个以上的单词。

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();

那么你真正追求的是什么呢?如果你想确保某些东西已经击中伤害(在这种情况下),为什么你不使用string.Format

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

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

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");
}
    public static bool In(this string str, params string[] p)
    {
        foreach (var s in p)
        {
            if (str.Contains(s)) return true;
        }
        return false;
    }
 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));
          }
       }