private static bool Filter(char ch)
return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');
public static void Main()
const string CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{};':\",./<>?";
var random = new Random();
.Select((i) => CHARS[random.Next(CHARS.Length)])
Console.WriteLine(new string(chars));
Console.WriteLine($"Filtered Count: {chars.Where(Filter).Count()}");
int count = FilterBuffer(chars, 0, chars.Length);
Console.WriteLine($"COUNT: {count}");
Console.WriteLine(new string(chars));
private static int FilterBuffer(char[] buffer, int start, int length)
for (var i = start; i < length; i++)
if (validCount > 0) { collateValidChars(); }
return finishIndex - start;
buffer, finishIndex + invalidCount,
finishIndex += validCount;
finishIndex = validCount;