LINQ将"TheQuickBrownFox"转换为"快速棕狐"的方式

Joh*_*ais 2 c# linq string

我试图转换一个由大写字母开头的单词组成的字符串.我想用空格分隔每个单词,只保留第一个大写字母.所有其他字母应为小写.

例如,"TheQuickBrownFox"将成为"快速棕色狐狸".

显然,我可以使用一个简单的方法foreach并通过检查每个字符来构建一个字符串,但我正在尝试使用LINQ.

你知道如何使用LINQ优雅地解决这个问题吗?

谢谢您的帮助.

Eli*_*sha 7

您可以使用正则表达式(和小LINQ)拆分单词:

public string SplitAsWords(string original)
{
    var matches = Regex.Matches(original, "[A-Z][a-z]*").Cast<Match>();
    var str = string.Join(" ", matches.Select(match => match.Value));
    str = str[0] + str.Substring(1).ToLower();
    return str;
}
Run Code Online (Sandbox Code Playgroud)

一个用法示例:

[Test]
public void Example()
{
    string str = SplitAsWords("TheQuickBrownFox");
    Assert.That(str, Is.EqualTo("The quick brown fox"));
}
Run Code Online (Sandbox Code Playgroud)

使用正则表达式的替代实现可以是(没有LINQ):

public string SplitAsWords(string original)
{
    var str = Regex.Replace(original, "[a-z][A-Z]", 
        new MatchEvaluator(match => match.Value.ToLower().Insert(1, " ")));

    return str;
}
Run Code Online (Sandbox Code Playgroud)