Ich schreibe eine grundlegende Funktion, um Millionen von Namen in einem einmaligen Batch-Prozess von ihrer aktuellen Großbuchstabenform in einen richtigen Mischfall umzuwandeln. Ich kam mit der folgenden Funktion auf:Wie kann diese Methode zur Umwandlung eines Namens in den richtigen Fall verbessert werden?
public string ConvertToProperNameCase(string input)
{
char[] chars = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(input.ToLower()).ToCharArray();
for (int i = 0; i + 1 < chars.Length; i++)
{
if ((chars[i].Equals('\'')) ||
(chars[i].Equals('-')))
{
chars[i + 1] = Char.ToUpper(chars[i + 1]);
}
}
return new string(chars);
}
Es ist in den meisten Fällen funktioniert wie:
- JOHN SMITH → John Smith
- SMITH, JOHN T → Smith, John T
- JOHN O'BRIAN → John O'Brian
- John Doe-Smith → John Doe-Smith
Es gibt einige Grenzfälle, die nicht funktionieren:
- JASON MCDONALD → Jason Mcdonald (Richtig: Jason McDonald)
- Oscar De La Hoya → Oscar De La Hoya (Richtig: Oscar de la Hoya )
- MARIE DiFranco → Marie Difranco (Richtig: Marie DiFranco)
Diese werden nicht erfasst, und ich bin nicht sicher, ob ich das kann h andle all diese seltsamen Randfälle. Wie kann ich ändern oder hinzufügen, um mehr Randfälle zu erfassen? Ich bin mir sicher, dass es Tonnen von Randfällen gibt, an die ich nicht einmal denke. Das gesamte Gehäuse sollte auch den nordamerikanischen Konventionen folgen, was bedeutet, dass, wenn bestimmte Länder ein anderes Großformat erwarten, das nordamerikanische Format Vorrang hat.
Etwas geringfügiges Detail, aber FxCop sollte Sie über 'input.ToLower()' warnen; Sie sollten auch die Kultur angeben, die dort verwendet werden soll. Ich bin mir nicht sicher, ob das auch für 'Char.ToUpper' gilt. –
Ich weiß, dass dies nicht hilft, aber ... Dies ist ein Grund, warum es wichtig ist, gute Daten für den Anfang zu haben. Wenn die Namen mit Groß- und Kleinbuchstaben gespeichert wurden, können Sie leicht in Großbuchstaben wechseln. Wenn Sie Ihre Namen in die erste/letzte Spalte aufteilen, ist es leicht, bei Bedarf mitzumachen, aber nicht so einfach umzukehren. –
@Nelson aber wenn Sie keine Kontrolle haben, woher die Daten kamen, müssen Sie fällig machen :( – Kelsey