c# - 通过 C# 将破折号分隔的字符串转换为驼峰式大小写

标签 c# regex string-conversion

我有一个包含实现破折号分隔命名约定的标签名称的大型 XML 文件。如何使用 C# 将标签名称转换为驼峰命名约定?

规则是:
1.将所有字符转换为小写
2. 每个破折号后的第一个字符大写
3. 删除所有破折号

示例
转换前

<foo-bar>
 <a-b-c></a-b-c>
</foo-bar>

转换后
<fooBar>
 <aBC></aBC>
</fooBar>

这是一个有效的代码示例,但处理速度很慢 - 我认为有更好的方法来实现我的目标。
string ConvertDashToCamelCase(string input)
{
    input = input.ToLower();
    char[] ca = input.ToCharArray();
    StringBuilder sb = new StringBuilder();

    for(int i = 0; i < ca.Length; i++)
    {
        if(ca[i] == '-')
        {
            string t = ca[i + 1].ToString().toUpper();
            sb.Append(t);
            i++;
        }
        else
        {
            sb.Append(ca[i].ToString());
        }
    }

    return sb.ToString();
}

最佳答案

您的原始代码运行缓慢的原因是您正在调用 ToString到处都是不必要的。没有那个必要。也不需要 char 的中间数组.下面的应该会快很多,而且比使用String.Split的版本要快, 也。

string ConvertDashToCamelCase(string input)
{
    StringBuilder sb = new StringBuilder();
    bool caseFlag = false;
    for (int i = 0; i < input.Length; ++i)
    {
        char c = input[i];
        if (c == '-')
        {
            caseFlag = true;
        }
        else if (caseFlag)
        {
            sb.Append(char.ToUpper(c));
            caseFlag = false;
        }
        else
        {
            sb.Append(char.ToLower(c));
        }
    }
    return sb.ToString();
}

我不会声称以上是最快的。事实上,有几个明显的优化可以节省一些时间。但上面的内容很清晰:易于理解。

关键是caseFlag ,用于指示复制的下一个字符应设置为大写。另请注意,我不会自动将整个字符串转换为小写。没有理由这样做,因为无论如何您都会查看每个字符并且可以在那时进行适当的转换。

这里的想法是代码不会做比它绝对必须做的更多的工作。

关于c# - 通过 C# 将破折号分隔的字符串转换为驼峰式大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29927918/

相关文章:

java - 字符串到日期;输入格式不同

regex - AWK 支持 ipv4 CIDR 表示法的正则表达式

java - 在 Java 中将字符串转换为 SomeType

javascript - 在 Razor 调用我的 HTML Helper 之前调用 Javascript 函数

c# - 使用 IIS 的基本身份验证在 WCF 服务中获取用户名

Java Regex 一组中的字符数决定了下一组中的字符数

Java 替换正则表达式不起作用

c++ - 您可以将 LPTSTR 转换为 BSTR 吗?

c# - 有什么方法可以加速 Entity Framework 中的 CreateIfNotExists 吗?

c# - 为什么 Struct 中属性的顺序会改变实例的大小?