我在构建一个好的算法时遇到了一些麻烦。这是我的标准:我正在读取xml文件中的字段作为字符串并尝试解释它以激活某些gui组件。更具体地说,作为字符串读入的字段是“允许字符”字段,并且gui组件是基于字段内容激活的复选框。例如,在xml中我有标签
<Allowed Field>ABCDEFGHIJKLMNOPQRSTUVWXYZ</Allowed Fields>.
当我在此字段中读取字符串时,程序应该知道字段内容类型是ALPHA并选中名为alpha的复选框。同样,如果字段具有字母数字内容或任何特殊字符。我有三个算法应该解释的复选框:Alpha,字母数字和特殊字符。我如何构建解释从xml读取的字符串含义的算法来表示所提到的字段类型?
由于
答案 0 :(得分:2)
这是Regex的另一个可能应用。
static Regex isAlpha = new Regex("^[A-Za-z]+$");
static Regex isAlphaNumeric = new Regex("^[A-Za-z0-9]+$");
static FieldKind AnalyzeKind (string s)
{
if(isAlpha.IsMatch(s)) return FieldKind.Alpha;
if(isAlphaNumeric.IsMatch(s)) return FieldKind.AlphaNumeric;
return FieldKind.AlphaNumericWithSpecialCharacters;
}
如果您打算在程序中调用AnalyseKind,可以通过在Regex构造函数中设置RegexOptions.Compiled来加快速度。
答案 1 :(得分:1)
static FieldKind AnalyzeKind (string s)
{
bool hasNumbers, hasSpecial;
foreach (char c in s) {
if (Char.IsNumber (c))
hasNumbers = true;
else if (!Char.IsLetter (c))
return FieldKind.AlphaNumericWithSpecialCharacters;
}
return (hasNumbers) ? FieldKind.AlphaNumeric : FieldKind.Alpha;
}
其余的取决于你定义的特殊字符(例如什么是空格?标点符号?)
Char
方法供您参考。