使用 LINQ 和 lambda 将字符串置于正确的大小写形式

发布于 2024-08-28 04:04:30 字数 811 浏览 4 评论 0原文

我有一个名为 ProperCase 的函数,它接受一个字符串,然后将每个单词中的第一个字母转换为大写。因此 ProperCase("john smith") 将返回“John Smith”。代码如下:

    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 和 lambda 更优雅地完成它。有人可以告诉我怎么做吗?

I have this function called ProperCase that takes a string, then converts the first letter in each word to uppercase. So ProperCase("john smith") will return "John Smith". Here is the code:

    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;
    }

This code workds perfectly, but I'm pretty sure I can do it more elegantly with LINQ and lambdas. Can some please show me how?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

情徒 2024-09-04 04:04:30

将输入字符串拆分为单词,将每个单词转换为标题大小写,然后将转换后的单词重新连接在一起:

TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;

string result = string.Join(" ", input.Split(' ')
                                      .Select(word => textInfo.ToTitleCase(word))
                                      .ToArray());

Split the input string into words, convert each word to title case, and join the converted words back together:

TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;

string result = string.Join(" ", input.Split(' ')
                                      .Select(word => textInfo.ToTitleCase(word))
                                      .ToArray());
强者自强 2024-09-04 04:04:30

另一种解决方案是

Regex.Replace(input, @"\b\w", m => m.ToString().ToUpper());

Another solution would be

Regex.Replace(input, @"\b\w", m => m.ToString().ToUpper());
平安喜乐 2024-09-04 04:04:30

基于 dtb 的回答。如果您在 cshtml 页面中处理 c# razor 并需要一个衬垫:

@(string.Join(" ", input.ToLower().Split(' ').Select(word => word.Substring(0,1).ToUpper() + word.Substring(1, word.Length - 1)).ToArray() ))

或 Javascript(可以使用正则表达式,但这很有趣):

var text = input.toLowerCase().split(' ').map(function(word){ return word.substring(0, 1).toUpperCase() + word.substring(1, word.length); }).join(" ");

Based on dtb's answer. If you are dealing with c# razor in an cshtml page and need a one liner:

@(string.Join(" ", input.ToLower().Split(' ').Select(word => word.Substring(0,1).ToUpper() + word.Substring(1, word.Length - 1)).ToArray() ))

Or Javascript (could use regex, but this was fun figuring out):

var text = input.toLowerCase().split(' ').map(function(word){ return word.substring(0, 1).toUpperCase() + word.substring(1, word.length); }).join(" ");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文