我正在处理一个程序,该程序会更改指定的字符,如果其为大写,则会将其更改为小写,反之亦然。
我写了一段理论上应该有效的代码。我也用foreach(x中的char c(方法写过它,但这不起作用。有什么建议吗?
预期输出teSTSTring给定输出teSTSTring
string x = "TEststRING";
for (int i = 0; i < x.Length; i++)
{
if (char.IsUpper(x[i]))
{
char.ToLower(x[i]);
}
if (char.IsLower(x[i]))
{
char.ToUpper(x[i]);
}
}
Console.WriteLine(x);
以下是StringBuilder 的解决方案
string x = "TEststRING";
car sb = new StringBuilder();
foreach (car c in x)
{
if (char.IsUpper(c))
{
sb.Append(char.ToLower(c));
}
else
{
sb.Append(char.ToUpper(c));
}
}
Console.WriteLine(sb.ToString());
您没有更改输入字符串。我建议你使用下面的代码。
它还将处理您有字母以外的字符的情况。
string output = new string(x.Select(c => char.IsLetter(c) ? (char.IsUpper(c) ? char.ToLower(c) : char.ToUpper(c)) : c).ToArray());
这是我的foreach
版本的替代方案。这个备选方案将使用Linq
,就像vivek nuna的答案一样。请注意,Linq是C#的一个强大部分,虽然你应该挖掘它,但它相当高级。这是我的版本:
char SwitchCase(char c) => char.IsUpper(c) ? char.ToLower(c) : char.ToUpper(c);
var x = "TEststRING(1)";
var output = string.Concat(x.Select(SwitchCase));
Console.WriteLine(output);
更改包括:
- 使用
string.Concat
将IEnumerable
连接到string
中,而不是将ToArray()
与new string()
一起使用 - 删除
char.IsLetter
检查,ToUpper
已经处理了它 - 创建一个
SwitchCase
函数来命名逻辑
在线试用!