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

Posted

技术标签:

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

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

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

【问题讨论】:

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

【讨论】:

以上是关于如何在 C# 中将字符串的每三个字母大写?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Perl 中将字符串中每个单词的首字母大写?

如何在一组特定字符中的每一个之后将字母变为大写

C#写程序,统计所给字符串中字母的个数、数字的个数和大写字母的个数

为啥在 Rust 中将字符串的第一个字母大写如此复杂?

c#窗体编写程序,统计所给字符串中字母的个数、数字的个数和大写字母的个数,各种控件?

有没有一种字符串方法可以在 python 中将首字母缩写词大写?