将字符串替换为下一行的大写字母(Pascal Casing)

Ach*_*les 4 c# string replace replacewith

我想从字符串中删除所有下划线,并在下划线后面加上字符的大写字母.所以例如:_my_string_变成:MyString相似:my_string成为MyString

有更简单的方法吗?我目前有以下(假设没有输入有两个连续的下划线):

        StringBuilder sb = new StringBuilder();
        int i;
        for (i = 0; i < input.Length - 1; i++)
        {
            if (input[i] == '_')
                sb.Append(char.ToUpper(input[++i]));
            else if (i == 0)
                sb.Append(char.ToUpper(input[i]));
            else
                sb.Append(input[i]);
        }
        if (i < input.Length && input[i] != '_')
            sb.Append(input[i]);

        return sb.ToString();
Run Code Online (Sandbox Code Playgroud)

现在我知道这并不是完全相关的,但我想在答案中提供的实现上运行一些数字,这里是使用1000000 iterations字符串的每个实现的毫秒结果"_my_string_121_a_":

Achilles: 313
Raj: 870
Damian: 7916
Dmitry: 5380
Equalsk: 574
Run Code Online (Sandbox Code Playgroud)

方法:

        Stopwatch stp = new Stopwatch();
        stp.Start();
        for (int i = 0; i < 1000000; i++)
        {
            sb = Test("_my_string_121_a_");
        }
        stp.Stop();
        long timeConsumed= stp.ElapsedMilliseconds;
Run Code Online (Sandbox Code Playgroud)

最后我想我会选择Raj的实现,因为它非常简单易懂.

Raj*_*ddy 7

这必须使用ToTitleCase使用System.Globalization命名空间

static string toCamel(string input)
{        
    TextInfo info = CultureInfo.CurrentCulture.TextInfo;
    input= info.ToTitleCase(input).Replace("_", string.Empty);
    return input;
} 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述