如何将字符串中所有单词的首字母大写?

时间:2012-01-23 14:45:17

标签: c# regex

首先,我的所有城市都以大写形式返回,因此我将它们切换为小写。我怎样才能将第一个字母作为大写字母?谢谢你的帮助!

List<string> cities = new List<string>();

foreach (DataRow row in dt.Rows)
{
    cities.Add(row[0].ToString().ToLower());

    **ADDED THIS BUT NOTHING HAPPENED**
     CultureInfo.CurrentCulture.TextInfo.ToTitleCase(row[0] as string);
}

return cities;

9 个答案:

答案 0 :(得分:17)

使用TextInfo.ToTitleCase方法:

System.Globalization.TextInfo.ToTitleCase();

来自MSDN示例的一些内容,已修改为使用OP的代码:

// Defines the string with mixed casing.
string myString = row[0] as String;

// Creates a TextInfo based on the "en-US" culture.
TextInfo myTI = new CultureInfo("en-US", false).TextInfo;

// Retrieve a titlecase'd version of the string.
string myCity = myTI.ToTitleCase(myString);

全部在一行:

string myCity = new CultureInfo("en-US", false).TextInfo.ToTitleCase(row[0] as String);

答案 1 :(得分:3)

正则表达式似乎有点长,但有效

List<string> cities = new List<string>();

foreach (DataRow row in dt.Rows)
{
    string city = row[0].ToString();
    cities.Add(String.Concat(Regex.Replace(city, "([a-zA-Z])([a-zA-Z]+)", "$1").ToUpper(System.Globalization.CultureInfo.InvariantCulture), Regex.Replace(city, "([a-zA-Z])([a-zA-Z]+)", "$2").ToLower(System.Globalization.CultureInfo.InvariantCulture)));

}

return cities;

答案 2 :(得分:3)

我知道我在这里复活了一个鬼,但我遇到了同样的问题,想分享我认为最好的解决方案。有几种方法可以做到这一点,要么拆分字符串并替换第一个字母,要么将其转换为char数组以获得更好的性能。但是,最好的表现是使用正则表达式。

你可以使用一点Regex巫毒来找到每个单词的第一个字母。您要查找的模式是 \ b \ w \ b 表示单词的开头, \ w 是字母字符) 。使用MatchEvaluator委托(或等效的lambda表达式)来修改字符串(模式找到的第一个字符)。

这是一个字符串的扩展方法,它将大写字符串中每个单词的第一个字母大写:

static string UpperCaseFirst(this string input)
{
    return Regex.Replace(input, @"\b\w", (Match match)=> match.ToString().ToUpper())
}

答案 3 :(得分:2)

new CultureInfo("en-US",false).TextInfo.ToTitleCase(myString);

答案 4 :(得分:1)

这是您可以使用的扩展方法。它支持当前的文化,或允许你传播文化。

使用:

cities.Add(row[0].ToString().ToTitleCase()

public static class StringExtension
{
    /// <summary>
    /// Use the current thread's culture info for conversion
    /// </summary>
    public static string ToTitleCase(this string str)
    {
        var cultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture;
        return cultureInfo.TextInfo.ToTitleCase(str.ToLower());
    }

    /// <summary>
    /// Overload which uses the culture info with the specified name
    /// </summary>
    public static string ToTitleCase(this string str, string cultureInfoName)
    {
        var cultureInfo = new CultureInfo(cultureInfoName);
        return cultureInfo.TextInfo.ToTitleCase(str.ToLower());
    }

    /// <summary>
    /// Overload which uses the specified culture info
    /// </summary>
    public static string ToTitleCase(this string str, CultureInfo cultureInfo)
    {
        return cultureInfo.TextInfo.ToTitleCase(str.ToLower());
    }
}

答案 5 :(得分:0)

使用linq:

String newString = new String(str.Select((ch, index) => (index == 0) ? ch : Char.ToLower(ch)).ToArray()); *

答案 6 :(得分:0)

您可以使用this方法(或从中创建扩展方法):

static string UpperCaseFirst(this string s)
{
    // Check for empty string.
    if (string.IsNullOrEmpty(s))
    {
        return string.Empty;
    }

    // Return char and concat substring.
    return char.ToUpper(s[0]) + s.Substring(1);
}

答案 7 :(得分:0)

这是一个快速的小方法:

public string UpperCaseFirstLetter(string YourLowerCaseWord)
{
    if (string.IsNullOrEmpty(YourLowerCaseWord))
        return string.Empty;

    return char.ToUpper(YourLowerCaseWord[0]) + YourLowerCaseWord.Substring(1);
}

答案 8 :(得分:0)

    public static string UppercaseFirst(string value)
    {
        // Check for empty string.
        if (string.IsNullOrEmpty(value))
        {
            return string.Empty;
        }
        // Return char and concat substring.
        return char.ToUpper(value[0]) + value.Substring(1);
    }

cities.Select(UppercaseFirst).ToList();