如果字符串包含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
?
答案 0 :(得分:40)
最好只调用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部分。
答案 1 :(得分:8)
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");
}
答案 2 :(得分:6)
那是因为if语句返回false,因为d不包含b + a,即“someonedamage”
答案 3 :(得分: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);
答案 4 :(得分:1)
这是因为d
不包含b + a
(即"someonedamage"
),因此应用程序才会终止(因为您的Console.ReadLine();
是在if
区块内。
答案 5 :(得分:1)
您可以使用linq编写扩展方法。
public static bool MyContains(this string str, params string[] p) {
return !p.Cast<string>().Where(s => !str.Contains(s)).Any();
}
编辑(thx to sirid):
public static bool MyContains(this string str, params string[] p) {
return !p.Any(s => !str.Contains(s));
}
答案 6 :(得分:1)
如果您有单词列表,可以执行以下方法:
public bool ContainWords(List<string> wordList, string text)
{
foreach(string currentWord in wordList)
if(!text.Contains(currentWord))
return false;
return true;
}
答案 7 :(得分: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);
答案 8 :(得分:1)
使用代码d.Contains(b + a)
,您可以检查“您是否因某人受到50点伤害”而包含“someonedamage”。这(我猜)你不想要。
+结束了两个b和a的字符串。
您必须通过
进行检查if(d.Contains(b) && d.Contains(a))
答案 9 :(得分: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();
答案 10 :(得分:1)
您的b + a
等于"someonedamage"
,因为您的d
不包含该字符串,您的if
语句会返回false
并且不会运行部分。
Console.WriteLine(" " + d);
Console.ReadLine();
你可以更有效地控制它;
bool b = d.Contains(a) && d.Contains(b);
这是DEMO
。
答案 11 :(得分:1)
因为b + a ="someonedamage"
,请尝试以下方法:
if (d.Contains(b) && d.Contains(a))
{
Console.WriteLine(" " + d);
Console.ReadLine();
}
答案 12 :(得分:0)
我刚检查了包含的空格,以检查字符串是否包含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();
答案 13 :(得分: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");
}
答案 14 :(得分:0)
答案 15 :(得分: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));
}
}
答案 16 :(得分:0)
public static bool In(this string str, params string[] p)
{
foreach (var s in p)
{
if (str.Contains(s)) return true;
}
return false;
}