2011-08-12 16 views
14
Public Function TitleCase(ByVal strIn As String) 
     Dim result As String = "" 
     Dim culture As New CultureInfo("en", False) 
     Dim tInfo As TextInfo = culture.TextInfo() 
     result = tInfo.ToTitleCase(strIn) 
     Return result 
End Function 

上記の関数に「TEST」を入力した場合。出力は「テスト」です。理想的には出力「テスト」.ToTitleCaseがすべての大文字の文字列で機能しない

は私も無駄にこの記事からコードスニペットを試します:Use of ToTitleCase

答えて

22

メモリが提供している場合、ToTitleCase()はすべて大文字で、文字列のために働くように見えたことはありません。基本的には、処理する前に文字列を小文字に変換する必要があります。 MSDNから

一般的に、タイトルケースが小文字に 大文字と文字の残りの部分に単語の最初の文字を変換します。しかしながら、この メソッドは現在、頭字語のように が完全に大文字のという単語を変換するための適切なケーシングを提供していません。 (C#の場合)

回避策の使用法:

string yourString = "TEST"; 

TextInfo formatter = new CultureInfo("en-US", false).TextInfo;  
formatter.ToTitleCase(yourString.ToLower()); 
+8

あなたの偉大な答えに追加するには、複数のオブジェクトを作成するのではなく、単にSystem.Globalization.CultureInfo.InvariantCulture.TextInfo.ToTitleCase(myString.ToLower()); –

+0

ありがとうございましたJamieは、長い文字列が好きだと思っていました。私のコードブロックにスクロールバーを置くことはできません:) –

2

またString.ToTitleCase()はほとんどの文字列のために働くが、マクドナルドとオブライアンのような名前に問題がある、と私はのCurrentCultureを使用します。大文字と小文字の違いこれは、これらを処理する単純な拡張メソッドです:

また
public string ToProperCase(this string value) 
{ 

    if (string.IsNullOrEmpty(value)) { 
     return ""; 
    } 

    string proper = System.Threading.Thread.CurrentThread.CurrentCulture. 
        TextInfo.ToTitleCase(value.ToLower()); 

    int oddCapIndex = proper.IndexOfAny({ 
     "D'", 
     "O'", 
     "Mc" 
    }); 


    if (oddCapIndex > 0) { 
     // recurse 
     proper = proper.Substring(0, oddCapIndex + 2) + 
       proper.Substring(oddCapIndex + 2).ToProperCase(); 

    } 

    return proper; 

} 

IndexOfAny(String []型)延長:

public int IndexOfAny(this string test, string[] values) 
{ 
    int first = -1; 
    foreach (string item in values) { 
     int i = test.IndexOf(item); 
     if (i > 0) { 
      if (first > 0) { 
       if (i < first) { 
        first = i; 
       } 
      } else { 
       first = i; 
      } 
     } 
    } 
    return first; 
} 
0

答え1に関しては、それはいいアイデアだが、コードはコンパイルされません。構文のために修正されたとき、それは動作しません。私はそれをデバッグする時間がありませんでしたが、あなたがそれを使用したい場合には必要になります。問題の一部は、インデックスは1ベースのインデックスを仮定していますが、Cベースでは0ベースです。他にも問題があります。

関連する問題