我将使用构建自定义扩展方法
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' }));使用哈希集版本时,一千一百万个字符的字符串耗时不到700毫秒(并且我处于调试模式)
编辑:
先前的代码是通用的,并且允许排除任何字符,但是如果您想以最快的方式删除空格,则可以使用:
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.IsWhiteSpacemethod:
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();}


