【问题标题】:Alternatively upper- and lowercase words in a string或者字符串中的大写和小写单词
【发布时间】:2014-10-04 06:40:58
【问题描述】:

我使用 Visual Studio 2010 版本。

我有数组字符串 [] = { "eat and go"};

我用 foreach 显示它

我想像这样转换字符串:EAT and GO

这是我的代码:

Console.Write( myString.First().ToString().ToUpper() + String.Join("",myString].Skip(1)).ToLower()+ "\n");

但输出是:Eat and go . :D lol

你能帮帮我吗?我会很感激。谢谢

【问题讨论】:

  • 您还有其他案例还是只有一个?
  • 将一个字符串称为“字符串”确实令人困惑。良好的命名约定有很大帮助。同时查看String.Split 并考虑使用新发现更新您的帖子。
  • 因为我是 c# 的新手.. 这是唯一的
  • “ToUpper 方法没有重载需要 0 个参数”是什么意思?

标签: c# string uppercase


【解决方案1】:

虽然.ToUpper() 会将字符串转换为其等效的大写字母,但在字符串对象上调用.First() 实际上会返回字符串的第一个元素(因为它实际上是一个char[])。 First() 实际上是作为 LINQ 扩展方法公开的,适用于任何集合类型。

与许多字符串处理函数一样,有很多方法可以处理它,这是我的方法。显然,您需要验证 value 以确保它被赋予足够长的字符串。

using System.Text;

public string CapitalizeFirstAndLast(string value)
    {
        string[] words = value.Split(' '); // break into individual words

        StringBuilder result = new StringBuilder();

        // Add the first word capitalized
        result.Append(words[0].ToUpper());

        // Add everything else
        for (int i = 1; i < words.Length - 1; i++)
            result.Append(words[i]);

        // Add the last word capitalized
        result.Append(words[words.Length - 1].ToUpper());

        return result.ToString();
    }

【讨论】:

  • 可能与我的代码示例无关,但 OP 确实在他们的代码中使用了它(检索第一个 字母 而不是第一个单词)
  • 我会试试的。。谢谢
  • 请记住someString.Split(char) 将接受您提供的任何string 对象,查找匹配的char 值,并在拆分后返回string[]。绝对是将字符串分解为单词的最简单方法,但如果您需要检查更复杂的模式,也存在其他方法(例如正则表达式)。
【解决方案2】:

如果总是三个字string,你可以简单地这样做:

string[] mystring = {"eat and go", "fast and slow"};
foreach (var s in mystring)
{
    string[] toUpperLower = s.Split(' ');
    Console.Write(toUpperLower.First().ToUpper() + " " + toUpperLower[1].ToLower() +" " + toUpperLower.Last().ToUpper());
 }

【讨论】:

  • 我会尝试..顺便说一句,吃和走,这只是例子。我不知道如何转换数组中的上上下下字符串:)
  • @Nic 然后使用 Kyle 解决方案。它似乎适用于随机长度的字符串。
  • 我能问你吗? “方法 'ToUpper' 没有重载需要 0 个参数”是什么意思?结果是:EATandGO。里面没有空格(_)。我是新手。谢谢。
  • @NicVia 我编辑了我的答案,所以结果是“EAT and GO”。这个链接可以帮助你解决这个错误stackoverflow.com/questions/11217681/…
  • 如何 Console.Write(myString.First().ToUpper() + myString.Last().ToUpper());为什么它不想工作。
【解决方案3】:

如果要连续交替,可以这样做:

private static string alternateCase( string phrase )
{
    String[] words = phrase.split(" ");
    StringBuilder builder = new StringBuilder();
    //create a flag that keeps track of the case change
    book upperToggle = true;
    //loops through the words
    for(into i = 0; i < words.length; i++)
    {
        if(upperToggle)
            //converts to upper if flag is true
            words[i] = words[i].ToUpper();
        else
            //converts to lower if flag is false
            words[i] = words[i].ToLower();
        upperToggle = !upperToggle;
        //adds the words to the string builder
        builder.append(words[i]);
    }
    //returns the new string
   return builder.ToString();
}

【讨论】:

    【解决方案4】:

    快速使用 ScriptCS:

    scriptcs (ctrl-c to exit)
    
    > var input = "Eat and go";
    > var words = input.Split(' ');
    > var result = string.Join(" ", words.Select((s, i) => i % 2 == 0 ? s.ToUpperInvariant() : s.ToLowerInvariant()));
    > result
    "EAT and GO"
    

    【讨论】:

      猜你喜欢
      • 2018-08-06
      • 2016-04-04
      • 2016-09-06
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      相关资源
      最近更新 更多