web-dev-qa-db-ja.com

文字列に別の2つの文字列が含まれています

文字列に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に入れる最も簡単な方法は何でしょうか?

14
Winkz

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

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番目の部分を取得します。

41
Brian Dishaw
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");
}
8
Dustin Kingen

これは、dにb + aが含まれていないため、ifステートメントがfalseを返すためです。つまり、「someonedamage」

6
Tralli

文字列に特定の数の単語が含まれているのか、特定の単語が含まれているのを探していますか?あなたの例は後者に向かっています。

その場合、文字列の解析を検討するか、少なくとも正規表現を使用することができます。
正規表現を学ぶ-プログラミングの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);  
3
marceljg

これは、dnotを含むb + a(つまり"someonedamage")を含むため、アプリケーションが終了するだけです(Console.ReadLine();ifブロック)。

1
Richard Everett

なぜならb + a ="someonedamage"、これを達成するために試してください:

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

きみの b + aは等しい"someonedamage"dにはその文字列が含まれていないため、ifステートメントはfalseを返し、次の部分は実行しません。

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

これをより効率的に制御できます。

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

DEMO です。

1
Soner Gönül
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();
1
Rik

コードd.Contains(b + a)を使用して、「誰かに50ダメージを与えた」に「someonedamage」が含まれているかどうかを確認します。そして、これは(私は推測する)あなたはしたくない。

+は、bとaの2つの文字列を連結します。

確認する必要があります

if(d.Contains(b) && d.Contains(a))
1
Tomtom

1つの文字列に他の2つの文字列が含まれているかどうかを知りたいですか?

この拡張機能を使用して、比較を指定することもできます。

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);
1
Tim Schmelter

単語のリストがある場合、次のような方法を実行できます。

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

Linqを使用して拡張メソッドを作成できます。

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

編集(thxからsirid):

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

文字列に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();
0
SMS
    public static bool In(this string str, params string[] p)
    {
        foreach (var s in p)
        {
            if (str.Contains(s)) return true;
        }
        return false;
    }
0
Rahmi Inevi
 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));
          }
       }

それで、あなたが本当に望んでいることは何ですか?何かが損傷を受けていることを確認したい場合(この場合)、なぜ string.Format

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

この方法で、あなたはあなたが探しているダメージ修飾子を持つ能力を持ち、他の部品のためにそれを計算することができます。

0
RWHertenstein2
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");
}
0
kavitha Reddy