C# 使用LINQ和lambdas将字符串放入适当的大小写中
我有一个名为ProperCase的函数,它接受一个字符串,然后将每个单词的第一个字母转换为大写。所以ProperCase(“john smith”)将返回“john smith”。代码如下:C# 使用LINQ和lambdas将字符串放入适当的大小写中,c#,linq,lambda,C#,Linq,Lambda,我有一个名为ProperCase的函数,它接受一个字符串,然后将每个单词的第一个字母转换为大写。所以ProperCase(“john smith”)将返回“john smith”。代码如下: public string ProperCase(string input) { var retVal = string.Empty; var words = input.Split(' '); foreach (var word in wo
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更优雅地完成它。能告诉我怎么做吗?将输入字符串拆分为单词,将每个单词转换为标题大小写,然后将转换后的单词重新连接在一起:
TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;
string result = string.Join(" ", input.Split(' ')
.Select(word => textInfo.ToTitleCase(word))
.ToArray());
另一个解决办法是
Regex.Replace(input, @"\b\w", m => m.ToString().ToUpper());
根据dtb的回答。如果您在cshtml页面中处理c#razor,并且需要一行程序:
@(string.Join(" ", input.ToLower().Split(' ').Select(word => word.Substring(0,1).ToUpper() + word.Substring(1, word.Length - 1)).ToArray() ))
或者Javascript(可以使用正则表达式,但这很有趣):
谢谢,做得很好!我在lambda:word=>textInfo.ToTitleCase(word.ToLower())中添加了一个ToLower,在这里不需要使用Linq。无论字数多少,ToTitleCase(输入)都会执行相同的操作。
var text = input.toLowerCase().split(' ').map(function(word){ return word.substring(0, 1).toUpperCase() + word.substring(1, word.length); }).join(" ");