我可以编写自己的算法来做这件事,但我觉得在C#中应该有等同于ruby's humanize的东西。
我用谷歌搜索了一下,但只找到了让约会变得人性化的方法。
示例:
发布于 2009-05-27 07:08:57
正如在@miguel's answer的注释中所讨论的,您可以使用从.NET 1.1开始提供的TextInfo.ToTitleCase
。以下是与您的示例对应的一些代码:
string lipsum1 = "Lorem lipsum et";
// Creates a TextInfo based on the "en-US" culture.
TextInfo textInfo = new CultureInfo("en-US",false).TextInfo;
// Changes a string to titlecase.
Console.WriteLine("\"{0}\" to titlecase: {1}",
lipsum1,
textInfo.ToTitleCase( lipsum1 ));
// Will output: "Lorem lipsum et" to titlecase: Lorem Lipsum Et
它将忽略全部是大写的东西,例如"LOREM LIPSUM ET“,因为它会处理缩写词在文本中的情况,这样"Ieee”(电气和电子工程师协会)就不会变成"IEEE“或"ieee”。
但是,如果您只想将第一个字符大写,则可以使用here…上的解决方案或者,您可以只拆分字符串,并将列表中的第一个字符串大写:
string lipsum2 = "Lorem Lipsum Et";
string lipsum2lower = textInfo.ToLower(lipsum2);
string[] lipsum2split = lipsum2lower.Split(' ');
bool first = true;
foreach (string s in lipsum2split)
{
if (first)
{
Console.Write("{0} ", textInfo.ToTitleCase(s));
first = false;
}
else
{
Console.Write("{0} ", s);
}
}
// Will output: Lorem lipsum et
发布于 2015-04-02 10:11:51
使用正则表达式看起来要干净得多:
string s = "the quick brown fox jumps over the lazy dog";
s = Regex.Replace(s, @"(^\w)|(\s\w)", m => m.Value.ToUpper());
发布于 2017-07-11 20:27:17
还有另一种优雅的解决方案:
在项目的静态类中定义函数ToTitleCase
using System.Globalization;
public static string ToTitleCase(this string title)
{
return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(title.ToLower());
}
然后在项目中的任何地方像字符串扩展一样使用它:
"have a good day !".ToTitleCase() // "Have A Good Day !"
https://stackoverflow.com/questions/913090
复制相似问题