更改字符串的索引字符



我正在处理一个程序,该程序会更改指定的字符,如果其为大写,则会将其更改为小写,反之亦然。

我写了一段理论上应该有效的代码。我也用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.ConcatIEnumerable连接到string中,而不是将ToArray()new string()一起使用
  • 删除char.IsLetter检查,ToUpper已经处理了它
  • 创建一个SwitchCase函数来命名逻辑

在线试用!

相关内容

  • 没有找到相关文章

最新更新