将字符串转换为标题大小写

我有一个字符串,其中包含大写和小写字符混合的单词。

例如: string myData = "a Simple string";

我需要将每个单词的首字符(用空格分隔)转换为大写。 所以我想要的结果为: string myData ="A Simple String";

有没有简单的方法来做到这一点? 我不想分割字符串并进行转换(这将是我的最后手段)。 另外,保证字符串是英文的。


MSDN:TextInfo.ToTitleCase

确保你包含: using System.Globalization

string title = "war and peace";

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

title = textInfo.ToTitleCase(title); 
Console.WriteLine(title) ; //War And Peace

//When text is ALL UPPERCASE...
title = "WAR AND PEACE" ;

title = textInfo.ToTitleCase(title); 
Console.WriteLine(title) ; //WAR AND PEACE

//You need to call ToLower to make it work
title = textInfo.ToTitleCase(title.ToLower()); 
Console.WriteLine(title) ; //War And Peace

尝试这个:

string myText = "a Simple string";

string asTitleCase =
    System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.
    ToTitleCase(myText.ToLower());

正如已经指出的那样,使用TextInfo.ToTitleCase可能不会给你想要的确切结果。 如果你需要更多的控制输出,你可以做这样的事情:

IEnumerable<char> CharsToTitleCase(string s)
{
    bool newWord = true;
    foreach(char c in s)
    {
        if(newWord) { yield return Char.ToUpper(c); newWord = false; }
        else yield return Char.ToLower(c);
        if(c==' ') newWord = true;
    }
}

然后像这样使用它:

var asTitleCase = new string( CharsToTitleCase(myText).ToArray() );

还有另一种变化。 基于这里的几个技巧,我已经将它缩减为这种扩展方法,这对我的目的非常有用:

public static string ToTitleCase(this string s) {
    return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());
}
链接地址: http://www.djcxy.com/p/21025.html

上一篇: Converting string to title case

下一篇: Is there an alternative to string.Replace that is case