sti*_*g_1 7 c# regex case-sensitive
在C#字符串中反转所有字母字符大小写的最简单方法是什么?例如"aBc1 $;" 应该成为"AbC1 $;" 我可以轻松编写一个执行此操作的方法,但我希望有一个我不知道的库调用会使这更容易.我还想避免列出所有已知的字母字符,并将每个字符与列表中的字符进行比较.也许这可以用正则表达式完成,但我不太了解它们.谢谢.
谢谢您的帮助.我为此创建了一个字符串扩展方法,其主要灵感来自Anthony Pegram的解决方案,但没有LINQ.我认为这在可读性和性能之间取得了很好的平衡.这就是我想出的.
public static string SwapCase(this string source) {
char[] caseSwappedChars = new char[source.Length];
for(int i = 0; i < caseSwappedChars.Length; i++) {
char c = source[i];
if(char.IsLetter(c)) {
caseSwappedChars[i] =
char.IsUpper(c) ? char.ToLower(c) : char.ToUpper(c);
} else {
caseSwappedChars[i] = c;
}
}
return new string(caseSwappedChars);
}
Run Code Online (Sandbox Code Playgroud)
Ant*_*ram 18
您可以使用LINQ进行操作.一种方法:
string input = "aBc1$";
string reversedCase = new string(
input.Select(c => char.IsLetter(c) ? (char.IsUpper(c) ?
char.ToLower(c) : char.ToUpper(c)) : c).ToArray());
Run Code Online (Sandbox Code Playgroud)
如果你不关心国际化:
string input = "aBc1$@[\\]^_{|{~";
Encoding enc = new System.Text.ASCIIEncoding();
byte[] b = enc.GetBytes(input);
for (int i = input.Length - 1; i >= 0; i -= 1) {
if ((b[i] & 0xdf) >= 65 && (b[i] & 0xdf) <= 90) { //check if alpha
b[i] ^= 0x20; // then XOR the correct bit to change case
}
}
Console.WriteLine(input);
Console.WriteLine(enc.GetString(b));
Run Code Online (Sandbox Code Playgroud)
另一方面,如果你关心国际化,你会想要传递CultureInfo.InvariantCulture给你的ToUpper()和ToLower()函数......