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?

-4voto

jcolebrand Punkte 16102
string input = "red HOUSE";
System.Text.StringBuilder sb = new System.Text.StringBuilder(input);

for (int j = 0; j < sb.Length; j++)
{
    if ( j == 0 ) //catches just the first letter
        sb[j] = System.Char.ToUpper(sb[j]);
    else  //everything else is lower case
        sb[j] = System.Char.ToLower(sb[j]);
}
// Store the new string.
string corrected = sb.ToString();
System.Console.WriteLine(corrected);

-4voto

CheeseNPort Punkte 48

Ich benutze dies, um Namen zu korrigieren. Es basiert auf dem Konzept, ein Zeichen in Großbuchstaben zu ändern, wenn es einem bestimmten Muster folgt. In diesem Fall habe ich mich für das Leerzeichen und den Bindestrich von "Mc" entschieden.

private String CorrectName(String name)
{
    List<String> StringsToCapitalizeAfter = new List<String>() { " ", "-", "Mc" };
    StringBuilder NameBuilder = new StringBuilder();
    name.Select(c => c.ToString()).ToList().ForEach(c =>
    {
        c = c.ToLower();
        StringsToCapitalizeAfter.ForEach(s =>
        {
            if(String.IsNullOrEmpty(NameBuilder.ToString()) ||
               NameBuilder.ToString().EndsWith(s))
            {
                c = c.ToUpper();
            }
        });
        NameBuilder.Append(c);
    });
    return NameBuilder.ToString();
}

0 Stimmen

Was ist mit anderen Leerzeichen als dem Leerzeichen?

-4voto

sebacipo Punkte 700

Mit dieser Methode können Sie das erste Zeichen eines jeden Wortes vergrößern.

Beispiel

"HeLlo wOrld" => "Hallo Welt"

public static string FirstCharToUpper(string input)
{
    if (String.IsNullOrEmpty(input))
        throw new ArgumentException("Error");
    return string.Join(" ", input.Split(' ').Select(d => d.First().ToString().ToUpper() +  d.ToLower().Substring(1)));
}

-4voto

dhiraj Punkte 73

Wie BobBeechey in seine Antwort auf diese Frage wird der folgende Code dafür verwendet:

private void txt_fname_TextChanged(object sender, EventArgs e)
{
    char[] c = txt_fname.Text.ToCharArray();
    int j;
    for (j = 0; j < txt_fname.Text.Length; j++)
    {
        if (j==0) c[j]=c[j].ToString().ToUpper()[0];
        else c[j] = c[j].ToString().ToLower()[0];
    }
    txt_fname.Text = new string(c); 
    txt_fname.Select(txt_fname.Text.Length, 1);
}

0 Stimmen

0 Stimmen

Bitte erläutern Sie wie Sie glauben, dass dies ein Verbesserung über Antworten, die bereits vor Jahren veröffentlicht wurden.

3 Stimmen

Bei näherer Betrachtung ist dies eine schlechte Antwort. 1) c[j].ToString().ToUpper()[0] ist eine ineffiziente Methode, um char.ToUpper(c[j]) . 2) Es gibt noch andere Unklarheiten und kleinere Unzulänglichkeiten - was mich nicht stören würde, wenn dies zum Zeitpunkt der Veröffentlichung der Frage geschrieben worden wäre. Aber wenn Sie eine Antwort später hinzufügen wollen, bitte stellen Sie sicher, dass es sich um einen qualitativ hochwertigen und neuartigen Ansatz handelt, der nicht bereits durch bestehende Antworten abgedeckt ist.

-6voto

user4606930 Punkte 1
 private string capitalizeFirstCharacter(string format)
 {
     if (string.IsNullOrEmpty(format))
         return string.Empty;
     else
         return char.ToUpper(format[0]) + format.ToLower().Substring(1);
 }

3 Stimmen

Willkommen bei StackOverflow. Auch wenn es manchmal nützlich ist, Code zu posten, ist es besser, einen Kommentar dazu abzugeben, was der Code tut und wie er die Frage beantwortet.

4 Stimmen

Dadurch wird zwar das erste Zeichen großgeschrieben, aber auch der Rest des Textes wird nicht großgeschrieben, was wahrscheinlich nicht der gewünschte Effekt ist.

4 Stimmen

Sie entspricht auch Antworten, die Jahre zuvor gepostet wurden, trägt also in keinem Fall zur Diskussion bei.

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