Estoy escribiendo una función básica para convertir millones de nombres, en un proceso por lotes único, de su forma actual en mayúsculas a un caso mixto apropiado. Se me ocurrió la siguiente función:¿Cómo se puede mejorar este método para convertir un nombre al caso apropiado?
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);
}
Funciona en la mayoría de los casos tales como:
- JOHN SMITH → John Smith
- Smith, John T → Smith, John T
- JOHN O'BRIAN → John O'Brian
- JOHN DOE-SMITH → John Doe-Smith
Hay algunos casos extremos que no funcionan:
- JASON MCDONALD → Jason McDonald (Correcto: Jason McDonald)
- OSCAR DE LA HOYA → Oscar de la Hoya (Correcto: Oscar de la Hoya)
- MARIE DIFRANCO → Marie Difranco (correcto: Marie DiFranco)
Estos no son capturados y no estoy seguro de si puedo h y todos estos casos de borde extraño. ¿Cómo puedo cambiar o agregar para capturar más casos extremos? Estoy seguro de que hay toneladas de casos extremos en los que ni siquiera estoy pensando. Toda la carcasa debe seguir las convenciones de América del Norte también, lo que significa que si ciertos países esperan un formato de capitalización diferente, entonces el formato de América del Norte tiene prioridad.
Un poco de detalles menores, pero FxCop debería darle una advertencia sobre 'input.ToLower()'; debe especificar la cultura para usar allí también. No estoy seguro de si eso se aplica a 'Char.ToUpper' también. –
Sé que esto no ayuda, pero ... Esta es una razón por la cual es importante tener buenos datos para empezar. Si los nombres se han almacenado con mayúsculas y minúsculas, es fácil ir a mayúsculas si es necesario. Del mismo modo, si tiene sus nombres divididos en primer/último, es fácil unirse cuando sea necesario, pero no tan fácil de revertir. –
@Nelson, pero cuando no tienes control de dónde provienen los datos tienes que hacerlo :( – Kelsey