【发布时间】:2010-11-10 08:23:38
【问题描述】:
我想从字符串中删除所有特殊字符。允许的字符是 A-Z(大写或小写)、数字 (0-9)、下划线 (_) 或点号 (.)。
我有以下,它有效,但我怀疑(我知道!)它不是很有效:
public static string RemoveSpecialCharacters(string str)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.Length; i++)
{
if ((str[i] >= '0' && str[i] <= '9')
|| (str[i] >= 'A' && str[i] <= 'z'
|| (str[i] == '.' || str[i] == '_')))
{
sb.Append(str[i]);
}
}
return sb.ToString();
}
最有效的方法是什么?正则表达式会是什么样子,它与普通字符串操作相比如何?
要清理的字符串会很短,通常在 10 到 30 个字符之间。
【问题讨论】:
-
我不会把它放在答案中,因为它不会更有效,但是有许多静态 char 方法,如 char.IsLetterOrDigit() 可以在 if 语句中使用至少让它更清晰。
-
我不确定检查 A 到 z 是否安全,因为它会输入 6 个非字母字符,只需要其中一个字符(下划线)。
-
专注于使您的代码更具可读性。除非您以每秒 500 次的循环执行此操作,否则效率并不是什么大问题。使用正则表达式,它会更容易阅读。l
-
拜伦,您需要强调可读性可能是对的。但是,我对正则表达式的可读性持怀疑态度。 :-)
-
正则表达式是否可读有点像德语是否可读;这取决于您是否知道(尽管在这两种情况下,您都会不时遇到毫无意义的语法规则;)