2012-01-23 11 views
4

まず、すべての都市が大文字で返されていたため、小文字に切り替えました。どのように最初の文字を大文字にすることができますか?助けてくれてありがとう! LINQで文字列内のすべての単語の最初の文字をどのように大文字にすることができますか?

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

:優しく、このポストから盗まれた

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

すべて一列に

// 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); 

System.Globalization.TextInfo.ToTitleCase(); 

ビットMSDN例から、OPのコードで動作するように修正:

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方法を使用

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

私はそれを見ましたが、それを自分のコードに追加する方法を理解できませんでした。 –

+1

@TCC System.Globalization.TextInfo.ToTitleCase(行[0]文字列として); –

+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が修正されました! –

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

私はここで幽霊を復活させていることは知っていますが、私は同じ問題を抱えており、私が最善の解決策だと思っていることを共有したいと思いました。文字列を分割して最初の文字を置き換える方法や、パフォーマンスを向上させるために文字列に変換する方法はいくつかあります。しかし、最高のパフォーマンスは、正規表現を使用しています。

Regexブードーのビットを使用して、各単語の最初の文字を見つけることができます。探しているパターンは\ b \ w\ bは単語の先頭を意味し、\ wはアルファベットです)。 MatchEvaluatorデリゲート(または同等のラムダ式)を使用して、文字列(パターンで見つかった最初の文字)を変更します。

ここでは、文字列の各単語の最初の文字を大文字-IFYれる文字列の上に拡張メソッドです:質問は、正規表現の専門家(ない私)で見つけることができるよう

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

最初の文字以外は小文字ではありません。 – B3ret

+1

次に、関数をinput.ToLower()に適用するだけです。 –

関連する問題