字符串包含另外两个字符串
本文关键字:字符串 两个 包含另 | 更新日期: 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));
}
}