我试图从数据库表的字符串中获取多个由“,”分隔的电子邮件地址,但它也返回给我空格,我想快速删除空格。
下面的代码确实删除了空格,但每当我尝试获取像 30000 这样的字符串中的大量电子邮件地址,然后尝试删除它们之间的空格时,它也会变慢。删除这些空格需要四到五分钟以上的时间。
Regex Spaces =
new Regex(@"\s+", RegexOptions.Compiled);
txtEmailID.Text = MultipleSpaces.Replace(emailaddress),"");
谁能告诉我如何在一秒钟内删除大量电子邮件地址中的空格?
最佳答案
我会使用 StringBuilder
构建自定义扩展方法,例如:
public static string ExceptChars(this string str, IEnumerable<char> toExclude)
{
StringBuilder sb = new StringBuilder(str.Length);
for (int i = 0; i < str.Length; i++)
{
char c = str[i];
if (!toExclude.Contains(c))
sb.Append(c);
}
return sb.ToString();
}
用法:
var str = s.ExceptChars(new[] { ' ', '\t', '\n', '\r' });
或者更快:
var str = s.ExceptChars(new HashSet<char>(new[] { ' ', '\t', '\n', '\r' }));
使用 hashset 版本,一个 1100 万个字符的字符串花费不到 700 毫秒(而且我处于 Debug模式)
编辑:
前面的代码是通用的,允许排除任何字符,但如果您想以最快的方式只删除空格,您可以使用:
public static string ExceptBlanks(this string str)
{
StringBuilder sb = new StringBuilder(str.Length);
for (int i = 0; i < str.Length; i++)
{
char c = str[i];
switch (c)
{
case '\r':
case '\n':
case '\t':
case ' ':
continue;
default:
sb.Append(c);
break;
}
}
return sb.ToString();
}
编辑 2:
正如评论中正确指出的那样,删除所有空白的正确方法是使用char.IsWhiteSpace
方法:
public static string ExceptBlanks(this string str)
{
StringBuilder sb = new StringBuilder(str.Length);
for (int i = 0; i < str.Length; i++)
{
char c = str[i];
if(!char.IsWhiteSpace(c))
sb.Append(c);
}
return sb.ToString();
}
关于c# - 删除字符串中空格的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5203607/