16

文字列に 2 語以上が含まれている場合、contain 関数で検索することは可能ですか? これは私がやろうとしていることです:

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

これを実行すると、コンソール ウィンドウは何も表示されずに非常に速くシャットダウンします。

もう 1 つの質問: 与えられたダメージの量を追加したい場合、その数値を取得してTryParse.

4

17 に答える 17

43

Contains2回呼び出すか、これを処理する独自の拡張メソッドを作成する方がよいでしょう。

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

これは、d に b + a が含まれていないため、if ステートメントが false を返すためです。つまり、"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 に答える
1

これは、が含まれdていない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

あなたb + aにはその文字列が含まれていない"someonedamage"ため、ステートメントは戻り、次の部分を実行しません。diffalse

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 に答える
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

文字列に 2 つ以上の単語が含まれているかどうかを確認するために、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();
于 2013-04-16T13:28:30.043 に答える
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

それで、あなたが本当に求めているのは何ですか?何かがダメージを受けていることを確認したい場合 (この場合)、なぜ使用しないのですか?string.Format

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

このようにして、探している損傷修飾子を持つことができ、他の部分についてそれを計算することができます。

于 2015-05-08T13:48:54.270 に答える