Hoy vamos a ver diferentes formas de reemplazar una cadena del tipo de datos string en determinada posición. Lo vamos a ver tanto para el lenguaje de programación C# como para VB.

Supongamos que tenemos el string: ABCDEFGHIJK y necesitamos reemplazar desde la posición 4 a la 5  de esa cadena por “YZ“, y como resultado deseamos que quede: ABCYZFGHIJK

¿Cómo lo podemos hacer?

  1. Existen varias maneras de poder hacerlo, la manera sencilla de agregar o quitar rangos es utilizar la clase StringBuilder.
C#
var elString = "ABCDEFGHIJK";
var aStringBuilder = new StringBuilder(elString);
aStringBuilder.Remove(3, 2);
aStringBuilder.Insert(3, "YZ");
elString = aStringBuilder.ToString();

 

VB

Dim elString = "ABCDEFGHIJK"
Dim aStringBuilder = New StringBuilder(elString)
aStringBuilder.Remove(3, 2)
aStringBuilder.Insert(3, "YZ")
elString = aStringBuilder.ToString()

Una alternativa a esto es usar la String.Substring, pero en lo personal creo que StringBuilder lo logra de una buena manera.

2. Otra manera de hacerlo sin tener que inicializar un nuevo StringBuilder es haciendo lo siguiente:

C#
string s = "ABCDEFGHIJK";
s= s.Remove(3, 2).Insert(3, "YZ");

VB
Dim s as string = "ABCDEFGHIJK"
s = s.Remove(3,2).Insert(3,"YZ")

3. Otra forma de hacer esta tarea es usando una extensión del método que no usa StringBuilder ni tampoco SubString, esta forma es muy buena porque permite ampliar el tamaño del String sin ningún problema.

ReplaceAt(int index, int longitud, string reemplazo)

C#
//// cadena - la cadena string original
//// index- la ubicación inicial a ser reemplazada(0-base)
//// length - el número de caracteres a ser removido antes de la inserción
//// replace - la cadena que reemplazará
public static string ReplaceAt(this string cadena, int index, int length, string replace)
{
    return cadena.Remove(index, Math.Min(length, cadena.Length - index)).Insert(index, replace);
}
VB
Public Shared Function ReplaceAt(cadena As String, index As Integer, length As Integer, replace As String) As String
Return cadena.Remove(index, Math.Min(length, cadena.Length - index)).Insert(index, replace)
End Function

Algunos ejemplos de RelaceAt:

"0123456789".ReplaceAt(7, 5, "Hola") = "0123456Hola"

Si se específica una longitud de 0, está función retornará simplemente una inserción:

"0123456789".ReplaceAt(4, 0, "Hola") = "0123Hola456789"

 

Existen varias formas más de hacer lo mismo, pero creo que con estás formas ya se pueden imaginar las restantes.

(Visitado 977 veces, 1 visitas hoy)