2012-01-23 102 views
4

首先,我的所有城市都被歸爲大寫,因此我將它們轉換爲小寫。我現在怎樣才能將第一個字母變成大寫字母?謝謝你的幫助!我該如何大寫字符串中所有單詞的第一個字母?

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; 
+0

加正則表達式的標記,這樣的問題可以通過正則表達式的專家(不是我)找到; - ) –

+0

已經回答在http://stackoverflow.com/questions/72831/how-do-i-capitalize-first-letter-of-first-name-and-last-name-in-c – dg90

回答

2

正則表達式看起來可能有點長,但工程

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
new CultureInfo("en-US",false).TextInfo.ToTitleCase(myString); 
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); 
} 
16

使用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); 
+0

我看到了,但無法弄清楚如何將其添加到我的代碼。 –

+1

@TCC System.Globalization.TextInfo.ToTitleCase(row [0] as string); –

+1

@TCC單擊MSDN上方法的引用。它有如何使用它的示例代碼。我會在我的文章中添加一些內容,以節省讀者一些時間。 –

0

這裏有一個快速的小方法:

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

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

如果我發送'string.Empty'會怎麼樣? –

+0

@OskarKjellin修復! – 2012-01-23 15:06:44

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()); 
    } 
} 
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();

3

我知道我在這裏復活了一個幽靈,但我遇到了同樣的問題,並且想分享我認爲是最好的解決方案。有幾種方法可以做到這一點,分割字符串並替換第一個字母,或者將其轉換爲char數組以獲得更好的性能。不過,最好的表現是使用正則表達式。

你可以使用一些Regex巫毒來找到每個單詞的第一個字母。您正在尋找的圖案是\ b \ w\ b表示單詞的開頭,而\ w是一個字母字符)。使用MatchEvaluator委託(或等效的lambda表達式)來修改字符串(第一個字符,即找到您的模式)。

這裏是在字符串的擴展方法,將大寫-IFY每個單詞的第一個字母的字符串:

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

雖然它不會小寫非首字母。 – B3ret

+1

然後,只需將函數應用於input.ToLower() –

相關問題