Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将C#中字符串的每三个字母大写?_C#_.net_Capitalize - Fatal编程技术网

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

如何将C#中字符串的每三个字母大写?,c#,.net,capitalize,C#,.net,Capitalize,如何将C#中字符串的每三个字母大写 我用for循环遍历整个字符串,但我现在想不出序列。您已经在遍历字符串中的字符了吗?然后添加一个计数器,在每次迭代中递增,如果它是3,则使用.ToUpper(currentCharacter)将其设为大写。然后重置计数器。我想你只是想要这样的东西: // String is immutable; copy to a char[] so we can modify that in-place char[] chars = input.ToCharArray();

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


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

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

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

// 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);
//字符串是不可变的;复制到char[],以便我们可以在适当的位置修改它
char[]chars=input.ToCharArray();
对于(int i=0;i

假设你想从第一个字母开始大写,那么“abcdefghij”将变成“abcdefghij”。如果您想在其他地方开始大写,只需更改
i

的初始值,就可以使用正则表达式

        var s = "Lorem ipsum";
        var foo = new string(s
            .Select((c, i) => (i + 1) % 3 == 0 ? Char.ToUpper(c) : c)
            .ToArray());
如果答案是每隔三个字符,那么您需要

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

对于(var i=2;我可以请您显示您的字符串并告诉我们结果是什么吗?使用计数器,使其计数为2,当它达到2时,大写字母并将计数器重置为0?使用计数器和mod 3这是从第一个字符开始还是第三个字符(即,这是字符1,4,7,…还是这是字符3,6,9,…)?为什么要将其递增1,然后检查是否为3?您已经需要知道字符的索引,所以每次迭代时只需将其递增3。我将其解释为“我尝试通过循环整个字符串来执行此操作,但后来我卡住了。”即使不是这样,您也可以继续递增计数器,并检查计数器%3是否为0-无需重置它。虽然这会起作用,但使用LINQ进行此操作对我来说感觉太过分了。很公平-每个计数器都有自己的:)这可能是因为在尝试向特殊角色施放upper时出现异常。@AftabAhmed不,不会。@AftabAhmed:不会<例如,code>char.ToUpper('1')
就是
'1'
。请看
char.ToUpper
-这说明了抛出异常吗?@JonSkeet+1没有立即跳上“坏问题”的行列,这确实令人耳目一新…@jdpenix:这不是一个很好的问题,这是肯定的-没有样本输入/输出,没有代码显示已经尝试过的内容,问了这个问题之后就没有互动了:(
var x = input.ToCharArray();
for (var i = 0; i <x.Length; i+=3) {
    x[i] = char.ToUpper(x[i]);
}
var replacement = new string(x);