我有一个名为ProperCase的函数,它接受一个字符串,然后将每个单词中的第一个字母转换为大写。所以ProperCase(“约翰史密斯”)将返回“约翰史密斯”。这是代码:
public string ProperCase(string input)
{
var retVal = string.Empty;
var words = input.Split(' ');
foreach (var word in words)
{
if (word.Length == 1)
{
retVal += word.ToUpper();
}
else if (word.Length > 1)
{
retVal += word.Substring(0, 1).ToUpper() + word.Substring(1).ToLower();
}
retVal += ' ';
}
if (retVal.Length > 0)
{
retVal = retVal.Substring(0, retVal.Length - 1);
}
return retVal;
}
这段代码工作得很好,但我很确定我可以用LINQ和lambdas更优雅地完成它。有人可以告诉我怎么样?
答案 0 :(得分:6)
将输入字符串拆分为单词,将每个单词转换为标题大小写,然后将转换后的单词重新加入:
TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;
string result = string.Join(" ", input.Split(' ')
.Select(word => textInfo.ToTitleCase(word))
.ToArray());
答案 1 :(得分:0)
另一个解决方案是
Regex.Replace(input, @"\b\w", m => m.ToString().ToUpper());
答案 2 :(得分:0)
根据dtb的回答。如果您要在cshtml页面中使用c#剃须刀,并且需要一个衬板:
lngCounter = Convert.ToInt32(strCounter, 16) + 1
strCounter = Hex(Convert.ToInt32(lngCounter)).PadLeft(8, "0"c)
My.Computer.FileSystem.RenameFile(strNextFileCtrName & ".nxt", strCounter & ".nxt")
Return strNewFileName
或Javascript(可以使用正则表达式,但这很有趣):
@(string.Join(" ", input.ToLower().Split(' ').Select(word => word.Substring(0,1).ToUpper() + word.Substring(1, word.Length - 1)).ToArray() ))