作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试转换由以大写字母开头的单词组成的字符串。我想用空格分隔每个单词,只保留第一个大写字母。所有其他字母应小写。
例如,“TheQuickBrownFox”将变成“The quick brown fox”。
显然,我可以使用一个简单的 foreach
并通过检查每个字符来构建一个字符串,但我正在尝试使用 LINQ 来完成。
您知道如何使用 LINQ 优雅地解决这个问题吗?
感谢您的帮助。
最佳答案
您可以使用正则表达式(和小 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;
}
用法示例:
[Test]
public void Example()
{
string str = SplitAsWords("TheQuickBrownFox");
Assert.That(str, Is.EqualTo("The quick brown fox"));
}
使用正则表达式的替代实现可以是(没有 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;
}
关于c# - 将 "TheQuickBrownFox"转换为 "The quick brown fox"的 LINQ 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3959681/
我是一名优秀的程序员,十分优秀!