using System;
using System.Text.RegularExpressions;
public class Test {
public static MatchCollection getPrintableChars(string haystack) {
var regex = new Regex(@"[^\p{Cc}^\p{Cn}^\p{Cs}]");
var matches = regex.Matches(haystack);
return matches;
}
public static void Main() {
var teststring1 = "Hello, World!";
var teststring2 = "Hello, World!" + (char)4;
var teststring1unprintablechars = getPrintableChars(teststring1);
var teststring2unprintablechars = getPrintableChars(teststring2);
Console.WriteLine("Testing a Printable String: " + teststring1unprintablechars.Count + " Printable Chars Detected");
Console.WriteLine("Testing a String With 1-Unprintable Char: " + teststring2unprintablechars.Count + " Printable Chars Detected");
foreach (Match unprintablechar in teststring1unprintablechars) {
Console.WriteLine("String 1 Printable Char:" + unprintablechar);
}
foreach (Match unprintablechar in teststring2unprintablechars) {
Console.WriteLine("String 2 Printable Char:" + unprintablechar);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnM7CgpwdWJsaWMgY2xhc3MgVGVzdCB7CglwdWJsaWMgc3RhdGljIE1hdGNoQ29sbGVjdGlvbiBnZXRQcmludGFibGVDaGFycyhzdHJpbmcgaGF5c3RhY2spIHsKCQl2YXIgcmVnZXggPSBuZXcgUmVnZXgoQCJbXlxwe0NjfV5ccHtDbn1eXHB7Q3N9XSIpOwoJCXZhciBtYXRjaGVzID0gcmVnZXguTWF0Y2hlcyhoYXlzdGFjayk7CgkJcmV0dXJuIG1hdGNoZXM7Cgl9CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpIHsKCQl2YXIgdGVzdHN0cmluZzEgPSAiSGVsbG8sIFdvcmxkISI7CgkJdmFyIHRlc3RzdHJpbmcyID0gIkhlbGxvLCBXb3JsZCEiICsgKGNoYXIpNDsKCQkKCQl2YXIgdGVzdHN0cmluZzF1bnByaW50YWJsZWNoYXJzID0gZ2V0UHJpbnRhYmxlQ2hhcnModGVzdHN0cmluZzEpOwoJCXZhciB0ZXN0c3RyaW5nMnVucHJpbnRhYmxlY2hhcnMgPSBnZXRQcmludGFibGVDaGFycyh0ZXN0c3RyaW5nMik7CgkJCgkJQ29uc29sZS5Xcml0ZUxpbmUoIlRlc3RpbmcgYSBQcmludGFibGUgU3RyaW5nOiAiICsgdGVzdHN0cmluZzF1bnByaW50YWJsZWNoYXJzLkNvdW50ICsgIiBQcmludGFibGUgQ2hhcnMgRGV0ZWN0ZWQiKTsKCQlDb25zb2xlLldyaXRlTGluZSgiVGVzdGluZyBhIFN0cmluZyBXaXRoIDEtVW5wcmludGFibGUgQ2hhcjogIiArIHRlc3RzdHJpbmcydW5wcmludGFibGVjaGFycy5Db3VudCArICIgUHJpbnRhYmxlIENoYXJzIERldGVjdGVkIik7CgkJCgkJZm9yZWFjaCAoTWF0Y2ggdW5wcmludGFibGVjaGFyIGluIHRlc3RzdHJpbmcxdW5wcmludGFibGVjaGFycykgewoJCQlDb25zb2xlLldyaXRlTGluZSgiU3RyaW5nIDEgUHJpbnRhYmxlIENoYXI6IiArIHVucHJpbnRhYmxlY2hhcik7CgkJfQoJCQoJCWZvcmVhY2ggKE1hdGNoIHVucHJpbnRhYmxlY2hhciBpbiB0ZXN0c3RyaW5nMnVucHJpbnRhYmxlY2hhcnMpIHsKCQkJQ29uc29sZS5Xcml0ZUxpbmUoIlN0cmluZyAyIFByaW50YWJsZSBDaGFyOiIgKyB1bnByaW50YWJsZWNoYXIpOwoJCX0KCX0KfQo=