364 Stimmen

Konvertierung von Zeichenketten in Groß- und Kleinschreibung

Ich habe eine Zeichenfolge, die Wörter in einer Mischung aus Groß- und Kleinbuchstaben enthält.

Zum Beispiel: string myData = "a Simple string";

Ich muss das erste Zeichen eines jeden Wortes (durch Leerzeichen getrennt) in Großbuchstaben umwandeln. Ich möchte also das Ergebnis als: string myData ="A Simple String";

Gibt es eine einfache Möglichkeit, dies zu tun? Ich möchte nicht die Zeichenfolge zu teilen und tun die Konvertierung (das wird mein letzter Ausweg sein). Auch ist es garantiert, dass die Zeichenfolgen in Englisch sind.

660voto

Kobi Punkte 129985

MSDN : TextInfo.ToTitleCase

Vergewissern Sie sich, dass Sie diese Angaben machen: 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

151voto

Winston Smith Punkte 20909

Versuchen Sie dies:

string myText = "a Simple string";

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

Wie bereits erwähnt wurde, führt die Verwendung von TextInfo.ToTitleCase möglicherweise nicht zu den gewünschten Ergebnissen. Wenn Sie mehr Kontrolle über die Ausgabe benötigen, könnten Sie etwas wie folgt tun:

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

Und dann verwenden Sie es wie folgt:

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

92voto

Todd Menier Punkte 34732

Eine weitere Variante. Basierend auf mehreren Tipps hier habe ich es auf diese Erweiterungsmethode reduziert, die für meine Zwecke gut funktioniert:

public static string ToTitleCase(this string s) =>
    CultureInfo.InvariantCulture.TextInfo.ToTitleCase(s.ToLower());

28voto

Luis Quijada Punkte 2325

Persönlich habe ich die TextInfo.ToTitleCase Methode, aber ich verstehe nicht, warum es nicht funktioniert, wenn alle Zeichen in Großbuchstaben geschrieben sind.

Ich mag zwar die util-Funktion, die von Winston Smith Lassen Sie mich die Funktion angeben, die ich derzeit verwende:

public static String TitleCaseString(String s)
{
    if (s == null) return s;

    String[] words = s.Split(' ');
    for (int i = 0; i < words.Length; i++)
    {
        if (words[i].Length == 0) continue;

        Char firstChar = Char.ToUpper(words[i][0]); 
        String rest = "";
        if (words[i].Length > 1)
        {
            rest = words[i].Substring(1).ToLower();
        }
        words[i] = firstChar + rest;
    }
    return String.Join(" ", words);
}

Spielend mit einigen Tests Streicher:

String ts1 = "Converting string to title case in C#";
String ts2 = "C";
String ts3 = "";
String ts4 = "   ";
String ts5 = null;

Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts1)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts2)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts3)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts4)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts5)));

Geben Sie Ausgabe :

|Converting String To Title Case In C#|
|C|
||
|   |
||

25voto

Binod Punkte 457

Vor kurzem habe ich eine bessere Lösung gefunden.

Wenn Ihr Text alle Buchstaben in Großbuchstaben enthält, dann TextInfo wird nicht in den richtigen Fall umgewandelt. Wir können das beheben, indem wir die Kleinbuchstabenfunktion wie folgt verwenden:

public static string ConvertTo_ProperCase(string text)
{
    TextInfo myTI = new CultureInfo("en-US", false).TextInfo;
    return myTI.ToTitleCase(text.ToLower());
}

Damit wird alles, was reinkommt, in Propercase umgewandelt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X