【问题标题】:How can I capitalize every third letter of a string in C#?如何在 C# 中将字符串的每三个字母大写?
【发布时间】:2014-04-05 14:30:18
【问题描述】:

如何在 C# 中将字符串的第三个字母大写?

我用 for 循环遍历整个字符串,但我现在想不出顺序。

【问题讨论】:

  • 能否请您出示您的字符串并告诉我们您想要什么结果?
  • 如何使用计数器,使其计数为 2,当它达到 2 时,将字母大写并将计数器重置为 0?
  • 使用计数器和 mod 3
  • 这是从第一个字符开始还是第三个字符(即这个字符是 1,4,7,... 还是这个 3,6,9,...)?跨度>

标签: c# .net capitalize


【解决方案1】:

您已经在遍历字符串中的字符了吗?然后添加一个计数器,每次迭代递增,如果是3,则使用.ToUpper(currentCharacter)使其大写。然后重置您的计数器。

【讨论】:

  • 你为什么要把它加1,然后检查它是否是3?您已经需要知道字符的索引,因此只需在每次迭代时将其增加 3。
  • 我将其解释为“我尝试通过循环遍历整个字符串来执行此操作,但后来我被卡住了。”即使不是这种情况,您也可以继续递增计数器并检查 whether counter % 3 是否为 0 - 无需重置它。
【解决方案2】:

我怀疑你只是想要这样的东西:

// String is immutable; copy to a char[] so we can modify that in-place
char[] chars = input.ToCharArray();
for (int i = 0; i < chars.Length; i += 3)
{
    chars[i] = char.ToUpper(chars[i]);
}
// Now construct a new String from the modified character array
string output = new string(chars);

假设您想从第一个字母开始大写,因此“abcdefghij”将变为“AbcDefGhiJ”。如果您想在其他地方开始大写,只需更改 i 的初始值即可。

【讨论】:

  • 这可能会在尝试将大写转换为特殊字符时出现异常。
  • @AftabAhmed 不,不会的。
  • @AftabAhmed:不,不会。 char.ToUpper('1') 只是 '1' 例如。查看char.ToUpper 的文档 - 这是否说明了引发异常的任何内容?
  • @JonSkeet +1 因为没有立即加入“坏问题”的潮流,肯定会让人耳目一新......
  • @jdphenix:这不是一个的问题,这是肯定的 - 没有示例输入/输出,没有代码显示已经尝试过的内容,并且在提出问题后没有交互:(
【解决方案3】:
        var s = "Lorem ipsum";
        var foo = new string(s
            .Select((c, i) => (i + 1) % 3 == 0 ? Char.ToUpper(c) : c)
            .ToArray());

【讨论】:

  • 虽然这可行,但使用 LINQ 对我来说感觉有点矫枉过正。
  • 很公平 - 每个人都有自己的 :)
【解决方案4】:

你可以只使用正则表达式。

如果答案是每三个字符,那么你想要

var input = "sdkgjslgjsklvaswlet";
var regex = new Regex("(..)(.)");
var replacement = regex.Replace(input, delegate(Match m)
                     {
                         return m.Groups[1].Value + m.Groups[2].Value.ToUpper();
                     });

如果你想要每隔三个字符,但从你想要的第一个开始:

var input = "sdkgjslgjsklvaswlet";
var regex = new Regex("(.)(..)");
var replacement = regex.Replace(input, delegate(Match m)
                     {
                         return m.Groups[1].Value.ToUpper() + m.Groups[2].Value;
                     });

如果你想要一个循环,你可以先转换成一个字符数组,这样你就可以改变值了。

每三个字符:

var x = input.ToCharArray();
for (var i = 2; i <x.Length; i+=3) {
    x[i] = char.ToUpper(x[i]);
}
var replacement = new string(x);

从头开始每三个字符:

var x = input.ToCharArray();
for (var i = 0; i <x.Length; i+=3) {
    x[i] = char.ToUpper(x[i]);
}
var replacement = new string(x);

【讨论】:

    猜你喜欢
    • 2018-01-03
    • 2014-05-19
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    相关资源
    最近更新 更多