c # cadena de caracteres reemplazar

Tengo una cadena donde el tercer último carácter es a veces a , Si este es el caso, quiero reemplazarlo con a . La cadena también podría tener otros , ‘s a lo largo. ¿Hay una solución elegante para esto?

EDIT: Gracias a todos por sus respuestas. Solo para aclarar, sí, por tercero, me refiero a una cadena de la forma xxxxxx,xx (es una cuestión de moneda europea)

Qué tal si:

 if (text[text.Length - 3] == ',') { StringBuilder builder = new StringBuilder(text); builder[text.Length - 3] = '.'; text = builder.ToString(); } 

EDITAR: Espero que lo anterior sea el enfoque más eficiente. Podrías intentar usar una matriz char en su lugar:

 if (text[text.Length - 3] == ',') { char[] chars = text.ToCharArray(); chars[text.Length - 3] = '.'; text = new string(chars); } 

Usar Substring también funcionará, pero no creo que sea más legible:

 if (text[text.Length - 3] == ',') { text = text.Substring(0, text.Length - 3) + "." + text.Substring(text.Length - 2); } 

EDITAR: He estado asumiendo que en esta situación usted ya sabe que el texto tendrá una longitud de al menos tres caracteres. Si ese no es el caso, obviamente también querrás una prueba para eso.

 string text = "Hello, World,__"; if (text.Length >= 3 && text[text.Length - 3] == ',') { text = text.Substring(0, text.Length - 3) + "." + text.Substring(text.Length - 2); } // text == "Hello, World.__" 

Un método más apropiado sería probablemente usar los cultivos.

 string input = "12345,67"; System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("nl-NL"); decimal value = System.Convert.ToDecimal(input); System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); string converted = string.Format("{0:C}", value); 

Prueba esto

 System.Text.RegularExpressions.Regex.Replace([the_string], "(,)(.{2})$", ".$2") 

Debería hacerlo si por ‘tercer último carácter’ literalmente te refieres al tercer y último carácter de toda la cadena.

Dicho esto, es posible que tenga que modificar si hay nuevas líneas; por ejemplo, agregue la enumeración RegexOptions.Singleline como un parámetro adicional.

Para un mejor rendimiento, probablemente, podría declarar previamente la expresión regular dentro de un cuerpo de clase:

 static readonly Regex _rxReplace = new Regex("(,)(.{2})$", RegexOptions.Compiled); 

Entonces cuando quieras usarlo es solo:

 var fixed = _rxReplace.Replace([the_string], ".$2");