【问题标题】:Make lower case upper and upper case lower in a string在字符串中使小写大写和大写小写
【发布时间】:2021-10-27 12:38:09
【问题描述】:

我一直在努力使用 .ToUpper 和 .ToLower 将字符串中的单词转换为相反的大小写。

示例 1:

Input: hello WORLD
Output: HELLO world

示例 2:

Input: THIS is A TEST
Output: this IS a test

【问题讨论】:

  • 您需要适应大小写混合的单词吗?标点符号呢?
  • 您能否分享您现有的代码,以便我们查看您遇到了什么问题?
  • 没有大小写混合词和标点符号@JohnathanBarclay

标签: c#


【解决方案1】:

C#

string a = "hello WORLD";

string b = new string(a.Select(_ => char.IsLower(_) ? char.ToUpper(_) : char.ToLower(_)).ToArray());

【讨论】:

  • 非常优雅! :D 只需编辑它以使语法突出显示工作。
【解决方案2】:

定义一个将单大小写单词转换为相反大小写的函数:

string ConvertCase(string word)
{
    if (word.All(char.IsUpper)) return word.ToLower();
    if (word.All(char.IsLower)) return word.ToUpper();
    return word;
}

然后将你的句子拆分成单词,将每个单词转换成一个字符串:

var convertedSenetence = string.Join(' ', sentence.Split(' ').Select(ConvertCase));

Working example


当然,如果您愿意,也可以内联:

var convertedSenetence = string.Join(' ', sentence
    .Split(' ')
    .Select(word =>
        word.All(char.IsUpper) ? word.ToLower() :
        word.All(char.IsLower) ? word.ToUpper() :
        word));

【讨论】:

    【解决方案3】:

    你可以这样做:

    string input = "hello WORLD";
    string output = "";
    foreach(char c in input ){
        output += Char.IsUpper(c) ? Char.ToLower(c) : Char.ToUpper(c);
    }
    Console.WriteLine(output);
    

    上面的代码反转了字符串中每个字符的大小写,所以不管是驼峰式、帕斯卡式还是只是大写/小写。

    【讨论】:

    • +1 你可以用output += Char.IsUpper(c) ? Char.ToLower(c) : c; 来简化它,因为你已经知道c 是大写的。
    • 如果你采用这种方法,你应该使用StringBuilder;在每次迭代中重新分配一个新字符串对于大输入来说效率很低。
    • @eglease 它只输入Char.ToUpper(c) 如果它的小写,所以它变成大写。如果我像你建议的那样改变它,一切都会是小写的。
    • c 将保持不变。因为您检查它是否为大写,所以它将保持大写。
    • @eglease 在这里,我测试一下:dotnetfiddle.net/WYxprb 一切都会像我说的那样小写。
    猜你喜欢
    • 2020-09-13
    • 2011-01-16
    • 2016-01-25
    • 2020-09-16
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2011-12-11
    相关资源
    最近更新 更多