0

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

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

4

4 回答 4

12

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

// 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.

于 2014-03-04T07:27:53.397 回答
6
        var s = "Lorem ipsum";
        var foo = new string(s
            .Select((c, i) => (i + 1) % 3 == 0 ? Char.ToUpper(c) : c)
            .ToArray());
于 2014-03-04T07:29:01.667 回答
1

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

于 2014-03-04T07:27:32.423 回答
0

You could just use a regular expression.

If the answer is every third char then you want

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();
                     });

If you want every third character, but starting with the first you want:

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;
                     });

If you want a loop, you can convert to a character array first, so you can alter the values.

For every third character:

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

For every third character from the beginning:

var x = input.ToCharArray();
for (var i = 0; i <x.Length; i+=3) {
    x[i] = char.ToUpper(x[i]);
}
var replacement = new string(x);
于 2014-03-04T07:37:11.090 回答