我有一个包含实现破折号分隔命名约定的标签名称的大型 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/