【发布时间】:2018-12-18 19:57:29
【问题描述】:
我有一个字符串,我需要检查这个字符串是否包含任何不在给定列表中的字符。
假设我有这个允许的字符new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' , '.'}
如果字符串是“54323.5” - 这没关系!
如果字符串是“543g23.5” - 这不行,因为它包含不在我允许的字符列表中的“g”。
空字符串被认为是无效的。
我试图通过使用“IndexOfAny()”来实现这一点,但到目前为止还没有运气。当然,将所有不允许的字符传递给此方法不是解决方案。
请注意,允许的字符列表可能会更改,并且根据列表更改更改验证算法不被视为解决方案。
对于那些问我尝试过的代码的人,这里是:
private bool CheckInvalidInput(string stringToCheck)
{
char[] allowedChars = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
var chars = Enumerable.Range(0, char.MaxValue + 1)
.Select(i => (char)i)
.ToArray();
var unallowedChars = chars.Except(allowedChars).ToArray();
bool validString = true;
if(stringToCheck.IndexOfAny(unallowedChars) != -1)
{
validString = false;
}
return validString;
}
希望您能提供更好的解决方案:D。
【问题讨论】:
-
请提供您尝试过的代码
-
使用
Enumerable扩展方法 (System.Linq):Any和Contains如果使用得当,就可以完成这项工作。 -
@Greg 我发布了我尝试过的代码,你能做得更好吗?以及为此投票的其他人。不知道为什么有人对这个问题投了反对票。
-
就这么做 - foreach (char in testString) 和内部 foreach (char in allowed chars)。如果您需要性能 - 首先制作 64k 的 bool 数组,以 chars 作为索引,然后 foreach (char in testString) 并检查该数组的余量 - 您将拥有 O(N)
-
@Lanorkin 你的建议听起来很不错我会这样尝试,并且使用下面建议的正则表达式方法,使用更少代码的解决方案将获胜:)。