643 Stimmen

Den ersten Buchstaben einer Zeichenkette groß schreiben (mit maximaler Leistung)

Ich habe eine DetailsView mit einer TextBox und ich möchte die Eingangsdaten sein immer gespeichert mit dem erster Buchstabe in Großbuchstaben .

Exemple :

"red" --> "Red"
"red house" --> " Red house"

Wie kann ich das erreichen? Leistungsmaximierung ?


Hinweis :

Ausgehend von den Antworten und den Kommentaren unter den Antworten denken viele, dass es hier um die Kapitalisierung geht alle Wörter in der Zeichenkette. z.B. => Red House Ist es nicht, aber wenn es das ist, was Sie suchen suchen Sie nach einer der Antworten, in der TextInfo 's ToTitleCase Methode. (Anmerkung: Diese Antworten sind falsch für die tatsächlich gestellte Frage). Siehe TextInfo.ToTitleCase Dokumentation für Vorbehalte (berührt keine Wörter in Großbuchstaben - sie werden als Akronyme betrachtet; kann Buchstaben in der Mitte von Wörtern kleinschreiben, die nicht kleingeschrieben werden sollten, z. B. "McDonald" "Mcdonald"; nicht garantiert, dass alle kulturspezifischen Feinheiten in Bezug auf Großschreibregeln berücksichtigt werden).


Hinweis :

Die Frage lautet zweideutig die Frage, ob die Buchstaben nach dem ersten Buchstaben gezwungen a Kleinschreibung . Die akzeptierte Antwort geht davon aus, dass nur der erste Buchstabe sollte geändert werden . Wenn Sie Folgendes erzwingen wollen alle Buchstaben der Zeichenkette außer dem ersten klein geschrieben werden soll, suchen Sie nach einer Antwort, die ToLower y die nicht ToTitleCase enthalten .

10 Stimmen

@Bobby: Es handelt sich nicht um ein Duplikat: Im OP wird darum gebeten, den ersten Buchstaben einer Zeichenfolge groß zu schreiben, in der Frage im Link wird der erste Buchstabe jedes Wortes groß geschrieben.

2 Stimmen

@GvS: Die erste Antwort lautet sehr detailliert und der erste Code-Block ist genau wonach er sucht. Auch der Unterschied zwischen der Großschreibung aller Wörter und der Großschreibung nur des ersten Wortes ist nur eine Schleife.

2 Stimmen

Aber Sie sagten, und ich zitiere: "Machen Sie den ersten Buchstaben JEDES WORTES groß". Warum also "rotes Haus" --> "Rotes Haus"? Warum ist das "h" von "Haus" kein Großbuchstabe?

1voto

Stephen Kennedy Punkte 18729

Es scheint hier sehr kompliziert zu sein, wenn man nur etwas braucht:

/// <summary>
/// Returns the input string with the first character converted to uppercase if a letter
/// </summary>
/// <remarks>Null input returns null</remarks>
public static string FirstLetterToUpperCase(this string s)
{
    if (string.IsNullOrWhiteSpace(s))
        return s;

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

Bemerkenswerte Punkte:

  1. Es ist eine Erweiterungsmethode.

  2. Wenn die Eingabe null, leer oder ein Leerzeichen ist, wird die Eingabe so zurückgegeben, wie sie ist.

  3. String.IsNullOrWhiteSpace wurde mit .NET Framework 4 eingeführt. Mit älteren Frameworks wird dies nicht funktionieren.

2 Stimmen

Ich kann nicht erkennen, inwiefern dies eine Verbesserung gegenüber der ursprünglich akzeptierten Antwort von vor vier Jahren darstellt. In der Tat, es ist inkonsistent (harmlos, aber vier Jahre zu spät, ich habe hohe Ansprüche an eine neue Antwort mit Zusatznutzen): Der einzige Vorteil der Verwendung der neueren IsNullOrWhiteSpace statt IsNullOrEmpty ist, wenn Sie sich finden und ändern der erste nicht-weiße Raum . Aber das tun Sie nicht - Sie arbeiten immer mit s[0] . Es ist also sinnlos [sowohl semantisch als auch leistungsmäßig], die IsNullOrWhiteSpace .

1 Stimmen

... warum diese Verwendung von IsNullOrWhiteSpace Was mich stört, ist, dass ein unvorsichtiger Leser denken könnte: "Er hat nach Leerzeichen gesucht, also findet der folgende Code wirklich einen Buchstaben und ändert ihn, auch wenn ihm ein Leerzeichen vorausgeht". Da Ihr Code einen "ersten" Buchstaben, dem ein Leerzeichen vorausgeht, nicht ändern kann, ist die Verwendung von IsNullOrWhiteSpace kann nur in die Irre führen einen Leser.

0 Stimmen

... ups, ich meine nicht die akzeptierte Antwort, ich meine Equisos Antwort aus der gleichen Zeitspanne.

0voto

Dinis Cruz Punkte 3991

FluentSharp hat die lowerCaseFirstLetter Methode, die dies tut.

0voto

Noctis Punkte 11165

Es scheint, dass keine der hier angegebenen Lösungen mit einem Leerzeichen vor der Zeichenkette zurechtkommt.

Ich füge dies nur als Gedanke hinzu:

public static string SetFirstCharUpper2(string aValue, bool aIgonreLeadingSpaces = true)
{
    if (string.IsNullOrWhiteSpace(aValue))
        return aValue;

    string trimmed = aIgonreLeadingSpaces
           ? aValue.TrimStart()
           : aValue;

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

Sie sollte Folgendes behandeln this won't work on other answers (dieser Satz hat ein Leerzeichen am Anfang), und wenn Sie die Leerzeichenbeschneidung nicht mögen, übergeben Sie einfach ein false als zweiten Parameter (oder ändern Sie den Standardwert in false und passieren true wenn Sie sich mit Raum beschäftigen wollen)).

0voto

Die folgende Funktion ist für alle Wege korrekt:

static string UppercaseWords(string value)
{
    char[] array = value.ToCharArray();
    // Handle the first letter in the string.
    if (array.Length >= 1)
    {
        if (char.IsLower(array[0]))
        {
            array[0] = char.ToUpper(array[0]);
        }
    }
    // Scan through the letters, checking for spaces.
    // ... Uppercase the lowercase letters following spaces.
    for (int i = 1; i < array.Length; i++)
    {
        if (array[i - 1] == ' ')
        {
            if (char.IsLower(array[i]))
            {
                array[i] = char.ToUpper(array[i]);
            }
        }
    }
    return new string(array);
}

Ich habe festgestellt, dass aquí .

1 Stimmen

Warum? Warum hinzufügen noch eine andere Antwort wenn es bereits so viele Antworten gibt, die ähnlich aussehen? Was ist falsch an todos die vorhandenen Antworten, die Sie dazu veranlasst haben, eine weitere hinzuzufügen?

0 Stimmen

Denn diese Answare ist für alle Wege richtig. Nehmen Sie es leicht.

1 Stimmen

Es tut mir leid, ich war unnötig hart. Ich werde mich an die Fakten halten: 1) Dies ist im Wesentlichen dasselbe wie thattolleyguy's Antwort sieben Jahre zuvor. 2) Dies hat den gleichen Fehler wie diese Antwort: Es werden keine anderen Leerzeichen als Leerzeichen verarbeitet. 3) Diese Antwort beantwortet eine etwas andere Frage als die, die OP gestellt hat. Verwenden Sie eine Antwort wie diese, wenn Sie wollen todos Wörter, deren erster Buchstabe groß geschrieben wird. 4) Normalerweise ist der einfachere Weg, dies zu erreichen, die Verwendung von TitleInfo.ToTitleCase. (Andererseits ist ein Vorteil des Codebeispiels, dass es nach Belieben angepasst werden kann).

0voto

Zamir Punkte 79

Um die obige Frage von Carlos zu beantworten: Wenn Sie mehrere Sätze groß schreiben wollen, können Sie diesen Code verwenden:

    /// <summary>
    /// Capitalize first letter of every sentence. 
    /// </summary>
    /// <param name="inputSting"></param>
    /// <returns></returns>
    public string CapitalizeSentences (string inputSting)
    {
        string result = string.Empty;
        if (!string.IsNullOrEmpty(inputSting))
        {
            string[] sentences = inputSting.Split('.');

            foreach (string sentence in sentences)
            {
                result += string.Format ("{0}{1}.", sentence.First().ToString().ToUpper(), sentence.Substring(1)); 
            }
        }

        return result; 
    }

0 Stimmen

Worauf bezieht sich der Begriff "Carlos"? Der OP (Original-Poster)?

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