How to Toggle String Case in .NET





0/5 (0 vote)
Several of the answers here lack fallbacks for Unicode.static string ToggleCaseHA(string str) { char[] chs = str.ToCharArray(); for (int i = chs.Length - 1; i >= 0; i--) { char ch = chs[i]; char foo = (char)(ch & ~0x20); if ((foo >= 0x41 && foo <= 0x5a)...
Several of the answers here lack fallbacks for Unicode.
static string ToggleCaseHA(string str) {
char[] chs = str.ToCharArray();
for (int i = chs.Length - 1; i >= 0; i--) {
char ch = chs[i];
char foo = (char)(ch & ~0x20);
if ((foo >= 0x41 && foo <= 0x5a) || (foo >= 0xc0 && foo <= 0xde && foo != 0xd7))
chs[i] = (char)(ch ^ 0x20);
else if (foo == 0xdf || (ch > 0xff && char.IsLetter(ch))
chs[i] = char.IsLower(ch) ? char.ToUpper(ch) : char.ToLower(ch);
}
return new string(chs);
}
Note by Alex Bell: this algorithm was included in test set at: http://webinfocentral.com/resources/toggleCaseAlgorithm.aspx[^] .
This algorithm indeed can process the Unicode String, but so can do all other algorithms (Alternate 1, Alternate 2, etc.) except for the "TogglebyCeChode
" (which is the fastest, but does not work on Unicode text).
After sample testing, this proposed algorithm demonstrated just a marginal performance increase over Alternate 1 and Alternate 2.