我希望有一个方法,可以将字符串的第一个字符转换为小写。
我的方法:
1.
public static string ReplaceFirstCharacterToLowerVariant(string name)
{
return String.Format("{0}{1}", name.First().ToString().ToLowerInvariant(), name.Substring(1));
}
2.
public static IEnumerable<char> FirstLetterToLowerCase(string value)
{
var firstChar = (byte)value.First();
return string.Format("{0}{1}", (char)(firstChar + 32), value.Substring(1));
}
你的方法是什么?
发布于 2010-08-25 18:45:43
我将使用简单的连接:
Char.ToLowerInvariant(name[0]) + name.Substring(1)
第一个解决方案没有优化,因为string.Format
很慢,如果你有一个永远不会改变的格式,你就不需要它了。它还生成一个额外的字符串来将字母转换为小写,这是不需要的。
使用"+ 32“的方法是丑陋的/不可维护的,因为它需要了解ASCII字符值偏移量。它还将使用Unicode数据和ASCII符号字符生成不正确的输出。
发布于 2010-08-25 18:58:45
根据情况,可能需要一些防御性编程:
public static string FirstCharacterToLower(string str)
{
if (String.IsNullOrEmpty(str) || Char.IsLower(str, 0))
return str;
return Char.ToLowerInvariant(str[0]) + str.Substring(1);
}
如果不打算更改字符串,if
语句还可以防止构建新的字符串。您可能希望该方法在空输入时失败,并抛出一个ArgumentNullException
。
正如人们所提到的,使用String.Format
来实现这一点有点过头了。
发布于 2016-04-13 01:04:10
以防它能帮助任何碰巧发现这个答案的人。
我认为这是最好的扩展方法,然后你可以用yourString.FirstCharacterToLower()来调用它;
public static class StringExtensions
{
public static string FirstCharacterToLower(this string str)
{
if (String.IsNullOrEmpty(str) || Char.IsLower(str, 0))
{
return str;
}
return Char.ToLowerInvariant(str[0]) + str.Substring(1);
}
}
https://stackoverflow.com/questions/3565015
复制相似问题