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?

8voto

JoelFan Punkte 35927

Versuchen Sie dies:

static public string UpperCaseFirstCharacter(this string text) {
    return Regex.Replace(text, "^[a-z]", m => m.Value.ToUpper());
}

2 Stimmen

Oder vielleicht eine andere Zeichenklasse (z. B. alphanumerisch \w ), so dass die Funktion unicode-fähig ist

0 Stimmen

@DmitryLedentsov- C# String-Klasse ist auf UTF-16 Zeichen aufgebaut. String-Klasse "Stellt Text als eine Folge von UTF-16-Codeeinheiten dar."

0 Stimmen

Eine Erklärung wäre angebracht. Was ist z. B. die Absicht/Idee? Bitte antworten Sie bis Bearbeitung Ihrer Antwort , nicht hier in den Kommentaren ( ohne "Bearbeiten:", "Aktualisieren:" oder ähnlich - die Antwort sollte so aussehen, als wäre sie heute geschrieben worden).

8voto

mbadeveloper Punkte 1192

Überprüfen Sie, ob die Zeichenkette nicht null ist, konvertieren Sie das erste Zeichen in Großbuchstaben und den Rest in Kleinbuchstaben:

public static string FirstCharToUpper(string str)
{
    return str?.First().ToString().ToUpper() + str?.Substring(1).ToLower();
}

0 Stimmen

Vielen Dank für die kleine Lösung anstelle von ein paar Zeilen Code nur für ein String-Wort!

7voto

Daniel Halan Punkte 574

Wenn Leistung/Speichernutzung ein Thema ist, dann erstellt dieser nur einen (1) StringBuilder und einen (1) neuen String mit der gleichen Größe wie der Original String.

public static string ToUpperFirst(this string str) {
  if(!string.IsNullOrEmpty(str)) {
    StringBuilder sb = new StringBuilder(str);
    sb[0] = char.ToUpper(sb[0]);

    return sb.ToString();

  } else return str;
}

4 Stimmen

Dies könnte mit einer einfachen char[] anstatt die gesamte Infrastruktur eines StringBuilder einpacken. Anstelle von new StringBuilder(str) verwenden str.ToCharArray() und anstelle von sb.ToString() verwenden new string(charArray) . StringBuilder emuliert die Art der Indizierung, die ein Zeichenarray von Haus aus bietet, so dass die tatsächliche .ToUpper Linie kann im Wesentlichen gleich sein :-)

0 Stimmen

Darren (ein Jahr später) zeigt, wie man dies mit ToCharArray wie von @JonathanGilbert vorgeschlagen

6voto

CAOakley Punkte 1022

Da ich zufällig auch daran arbeitete und mich nach Ideen umsah, kam ich auf diese Lösung. Es verwendet LINQ, und wird in der Lage sein, den ersten Buchstaben einer Zeichenfolge groß zu schreiben, auch wenn das erste Vorkommen nicht ein Buchstabe ist. Hier ist die Erweiterung Methode, die ich am Ende machen.

public static string CaptalizeFirstLetter(this string data)
{
    var chars = data.ToCharArray();

    // Find the Index of the first letter
    var charac = data.First(char.IsLetter);
    var i = data.IndexOf(charac);

    // capitalize that letter
    chars[i] = char.ToUpper(chars[i]);

    return new string(chars);
}

Ich bin sicher, dass es einen Weg gibt, dies zu optimieren oder ein wenig zu bereinigen.

6voto

Víctor García Punkte 81

Wenn nur der erste Buchstabe großgeschrieben werden soll und der Rest der Zeichenkette keine Rolle spielt, können Sie einfach das erste Zeichen auswählen, es großschreiben und mit dem Rest der Zeichenkette ohne das ursprüngliche erste Zeichen verketten.

String word ="red house";
word = word[0].ToString().ToUpper() + word.Substring(1, word.length -1);
//result: word = "Red house"

Wir müssen das erste Zeichen in ToString() umwandeln, weil wir es als Char-Array einlesen und der Char-Typ keine ToUpper()-Methode hat.

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