Ich hätte gerne eine Methode, die das erste Zeichen einer Zeichenfolge in Kleinbuchstaben umwandelt.
Meine Ansätze:
1.
public static string ReplaceFirstCharacterToLowerVariant(string name)
{
return String.Format("{0}{1}", name.First().ToString().ToLowerInvariant(), name.Substring(1));
}
2.
public static IEnumerable<char> FirstLetterToLowerCase(string value)
{
var firstChar = (byte)value.First();
return string.Format("{0}{1}", (char)(firstChar + 32), value.Substring(1));
}
Was wäre Ihr Ansatz?
char.ToLower(name[0]).ToString() + name.Substring(1)
+
Operator ist langsam, wenn Sie viele Zeichenfolgen verketten. In diesem FallStringBuilder
würde a viel besser abschneiden. Ist+
jedoch viel schneller alsstring.Format
. Verwenden Sie Letzteres, wenn Sie tatsächlich etwas formatieren müssen (z. B. die Anzeige von Ganzzahlen, Doppelwerten oder Datumsangaben).+
Operator überhaupt nicht langsam, da der Compiler daraus eine machtString.Concat
(ist jedochString.Join
schneller alsString.Concat
aus irgendeinem dummen Grund).public static string ToLowerFirst(this string source) { if (string.IsNullOrWhiteSpace(source)) return source; var charArray = source.ToCharArray(); charArray[0] = char.ToLower(charArray[0]); return new string(charArray); }
basierend auf dem Kommentar von @ MatteoMigliore verwendet.Je nach Situation kann eine kleine defensive Programmierung wünschenswert sein:
Die
if
Anweisung verhindert auch, dass eine neue Zeichenfolge erstellt wird, wenn sie ohnehin nicht geändert wird. Möglicherweise möchten Sie, dass die Methode stattdessen bei der Null-Eingabe fehlschlägt, und eine auslösenArgumentNullException
.Wie die Leute bereits erwähnt haben, ist die Verwendung
String.Format
dafür übertrieben.quelle
Nur für den Fall, dass es jemandem hilft, der zufällig über diese Antwort stolpert.
Ich denke, dies wäre am besten als Erweiterungsmethode, dann können Sie es mit yourString.FirstCharacterToLower () aufrufen;
quelle
Meins ist
quelle
val.Remove
? Scheint mir ein wenig kontraintuitiv zu sein.Ich mag die akzeptierte Antwort, aber neben der Überprüfung
string.IsNullOrEmpty
würde ich auch prüfen, obChar.IsLower(name[1])
es sich um eine Abkürzung handelt. Zum Beispiel möchten Sie nicht, dass "AIDS" zu "AIDS" wird.quelle
Die schnellste Lösung, die ich kenne, ohne c # zu missbrauchen:
quelle
Kombinierte ein paar und machte es zu einer verkettbaren Erweiterung. Kurzschluss bei Leerzeichen und Nichtbuchstaben hinzugefügt.
quelle
Dies ist eine kleine Erweiterungsmethode, die die neueste Syntax und korrekte Validierungen verwendet
quelle
Benutze das:
quelle
Es ist besser zu verwenden,
String.Concat
alsString.Format
wenn Sie wissen, dass das Format keine Daten ändert und nur eine Verkettung erwünscht ist.quelle