文字列に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
を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番目の部分を取得します。
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");
}
これは、dにb + aが含まれていないため、ifステートメントがfalseを返すためです。つまり、「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
がnotを含むb + a
(つまり"someonedamage"
)を含むため、アプリケーションが終了するだけです(Console.ReadLine();
がif
ブロック)。
なぜならb + a ="someonedamage"
、これを達成するために試してください:
if (d.Contains(b) && d.Contains(a))
{
Console.WriteLine(" " + d);
Console.ReadLine();
}
きみの 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();
コードd.Contains(b + a)
を使用して、「誰かに50ダメージを与えた」に「someonedamage」が含まれているかどうかを確認します。そして、これは(私は推測する)あなたはしたくない。
+は、bとaの2つの文字列を連結します。
確認する必要があります
if(d.Contains(b) && d.Contains(a))
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);
単語のリストがある場合、次のような方法を実行できます。
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();
}
編集(thxからsirid):
public static bool MyContains(this string str, params string[] p) {
return !p.Any(s => !str.Contains(s));
}
文字列に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();
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));
}
}
それで、あなたが本当に望んでいることは何ですか?何かが損傷を受けていることを確認したい場合(この場合)、なぜ 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");
}