所以基本上如果我想从
转换一个名字stephen smith
到
Stephen Smith
我可以轻松地使用来自页面上的css,但理想情况下我想先抓住它并在数据库出来时更改它。我如何让csharp将字符串封顶。
有这个功能吗?
答案 0 :(得分:62)
您可以使用System.Globalization.TextInfo类的ToTitleCase
方法执行此操作:
CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
TextInfo textInfo = cultureInfo.TextInfo;
Console.WriteLine(textInfo.ToTitleCase(title));
Console.WriteLine(textInfo.ToLower(title));
Console.WriteLine(textInfo.ToUpper(title));
答案 1 :(得分:26)
名字很棘手。 First Letter 的简单规则不适用。这里唯一的参议员方法是询问用户他们想要的方式。其他任何事都可能导致进攻。
如果我的名字是MacPhearson,ODowel,或者仅仅是marc,Marc甚至是mArC - 那么坦率地说:不管它。信任用户以使其正确。当你走进文化之间时,这会变得更加棘手。
答案 2 :(得分:4)
希望这会有所帮助:)...但请注意,如果您有许多字符串可以改变案例,那么这个过程很可能会很慢......
string str = "to title case";
Char[] ca = str.ToCharArray();
foreach(Match m in Regex.Matches(str, @"\b[a-z]"))
{
ca[m.Index] = Char.ToUpper(ca[m.Index]);
}
Console.WriteLine(new string(ca));
更新或者你也可以使用自定义评估程序来改变这种情况:
string str = "to title case";
Console.WriteLine(Regex.Replace(str, @"\b[a-z]", delegate (Match m)
{
return m.Value.ToUpper();
}
));
注意在我的测试中,使用1,000,000次迭代时,第一种方法仅比使用评估者的方法快0.48秒(第一种方法需要6.88秒,后者需要7.36秒才能完成1,000,000次迭代)所以我不会考虑速度来选择......
答案 3 :(得分:2)
不,没有。如果您知道您正在处理的字符串是一个名称(或者,更好的说,是一系列以空格分隔的人名),您应该能够在一个for
周期内使用Char.ToUpper
自行编码。 。然而,有一个文化特定的案例,如名称中使用的阿拉伯语单词“bin”,“al”等,不应大写(使用拉丁语转录)。西方语言中的“von”或“van”也是如此。
更新:请注意,TextInfo.ToTitleCase
用于不同目的 - 它不打算将人名的首字母大写,而是提供适当的大小写标题(就像新闻文章的头条新闻一样)。
虽然.NET中的当前实现很容易满足所要求的目的,但我会避免这样做。原因是未来实施可能会发生重大变化,因此为人名制定自定义实施更安全。此外,我怀疑这种方法对于给定文化的字符串的标题 - 套管是否真的可用。例如,在捷克语("cs-CZ"
)中,正确的标题大小写应仅仅将第一个单词的第一个字母大写。
答案 4 :(得分:1)
Pedro提供的答案略有延伸:
Regex.Replace(Name, @"(?:(M|m)(c)|(\b))([a-z])", delegate(Match m) {
return String.Concat(m.Groups[1].Value.ToUpper(), m.Groups[2].Value, m.Groups[3].Value, m.Groups[4].Value.ToUpper());
});
除了标题案例之外,这将正确地利用McNames。例如 “simon mcguinnis” - > “Simon McGuinnis”
如果匹配“Mc”或“mc”,则组1和组2包含“m”和“c”,组3为空。
连接所有4个组(空或其他组)以生成返回字符串。
答案 5 :(得分:1)
对我来说,这个姓氏中有一个“人物”。
if (Surname.Contains("'"))
{
String[] Names = Surname.Split('\'').ToArray();
Surname = textInfo.ToTitleCase(Names[0].ToString());
Surname += "''";
Surname += textInfo.ToTitleCase(Names[1].ToString());
}
答案 6 :(得分:1)
我使用单行:
topic_id
答案 7 :(得分:0)
这是字符串类的扩展方法,用于大写单个单词。您可以将其与str.Split()
和str.Join
一起使用,以大写str
字符串的每个单词。您可以添加对空字符串或一个字符长度字符串的检查。
public static string Capitalize(this string word)
{
return word.Substring(0, 1).ToUpper() + word.Substring(1).ToLower();
}
答案 8 :(得分:-6)
视野
string titulo = "";
string result = System.Globalization.CultureInfo.TextInfo.ToLower(titulo);
然后应用css属性
text-transform = font-family: sans-serif;