如何检查字符串是否只包含数组中的单词?
我可以返回 true
如果字符串包含数组中的任何单词,则使用 Contains()
public bool ValidateString(string strCondition)
{
List<string> words = new List<string>() { "true", "false", "&&", "||", " " };
foreach (string word in words)
{
if(strCondition.Contains(word))
return true;
}
return false;
}
但是我怎样才能返回false
如果作为参数发送的字符串( strCondition
)包含除 true
以外的任何单词或字母或数字等, false
, &&
, ||
, ?
Regex
里面有没有选项或者有人能想出一个好的解决方案吗?
编辑
下面应该返回true
true && false || false && false
true || false && false && false
下面应该返回 false,因为它包含除 true
之外的单词/数字/特殊字符, false
, &&
, ||
,
true & false || false < false
true >> false && false && false
true and false 123 false && false
true || false && false xyz false
最佳答案
首先,您的代码存在 clbuttic problem 问题: 它会返回 true
对于包含单词“untrue”的字符串,因为代码不注意单词边界。
如果您想检查是否不包含其他单词,请拆分字符串,并根据“已批准”单词列表检查每个项目:
var allApproved = strCondition.Split(' ').All(word => words.Contains(word));
这种方法意味着 words
中的单词不包含空格。
请注意,这不是最有效的方法,尽管它适用于小型列表。如果列表很长,切换到 HashSet<string>
相反。
关于c# - 如何知道一个字符串只包含特定的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29235926/