En ambos casos no puedes usar split() porque este solo funciona con un caracter, debes crear tu propia función, por ejemplo para A lo tienes solucionado con:
Cadena = "121213121"
CaracteraQuitar = "121"
trace(quitarOcurrencias(Cadena, CaracteraQuitar))
function quitarOcurrencias(cadena, quitar) {
for (i = cadena.indexOf(quitar); i >= 0; i = cadena.indexOf(quitar)) {
cadena = cadena.substring(0, i) + cadena.substring(i + quitar.length)
}
return cadena
}
// Devuelve: 213
- He utilizado un FOR porque las instrucciones son sencillas (un FOR es un "WHILE sencillo"), recuerda la estructura de un FOR:
for (inicialización de variables; condición para continuar; actualización de variables) {
código
}- Su equivalente en WHILE sería:
inicialización de variables
while (condición para continuar) {
código
actualización de variables
}- El objetivo del FOR sería ahorrarse una par de líneas sencillas, aunque pueden ser más pero ya complicarían más la legibilidad del FOR
- Pero si lo quieres en WHILE completamente equivalente, porque he leído que no te gustan los FOR sería:
Cadena = "121213121"
CaracteraQuitar = "121"
trace(quitarOcurrencias(Cadena, CaracteraQuitar))
function quitarOcurrencias(cadena, quitar) {
i = cadena.indexOf(quitar)
while (i >= 0) {
cadena = cadena.substring(0, i) + cadena.substring(i + quitar.length)
i = cadena.indexOf(quitar)
}
return cadena
}
// Devuelve: 213
- indexOf busca una subcadena en una cadena, si la encuentra devuelve el índice de donde empieza la subcadena, devuelve -1 si no encuentra nada, hace la búsqueda de izquierda a derecha y solo hace una vez, por eso lo pongo en un bucle
En caso de B no puedes quitar mientras buscas, para ese caso debes marcar los caracteres a quitar y al final quitarlos
Cadena = "121213121";
CaracteraQuitar = "121";
trace(quitarOcurrencias2(Cadena, CaracteraQuitar))
function quitarOcurrencias2(cadena, quitar) {
i = 0
idx = cadena.indexOf(quitar, i)
if (idx < 0) return cadena //Si no hay ocurrencias salgo de inmediato
for (marcas = []; idx >= 0; i = idx + 1, idx = cadena.indexOf(quitar, i)) {
for (j = 0; j < quitar.length; j++) {
marcas[idx + j] = true
}
}
nuevaCadena = ""
for (i = 0; i < cadena.length; i++) {
if (marcas[i] != true) {
nuevaCadena += cadena.charAt(i)
}
}
return nuevaCadena
}
// Devuelve: 3
Para este caso igualmente utilizo indexOf pero le doy un parámetro extra que es el índice de caracter donde debe empezar a buscar la subcadena en la cadena, tengo un array para guardar las marcas de acuerdo a la posición de los caracteres, marco con true los caracteres que coinciden. Al final reviso los caracteres marcados y solo conservo los que no tienen marca
He usado FOR y como vez se complica un poquitín más y podría no ser muy legible XD, acá te dejo el equivalente con WHILE
Cadena = "121213121";
CaracteraQuitar = "121";
trace(quitarOcurrencias2(Cadena, CaracteraQuitar))
function quitarOcurrencias2(cadena, quitar) {
i = 0
idx = cadena.indexOf(quitar, i)
if (idx < 0) return cadena //Si no hay ocurrencias salgo de inmediato
marcas = []
while (idx >=0) {
for (j = 0; j < quitar.length; j++) {
marcas[idx + j] = true
}
i = idx + 1
idx = cadena.indexOf(quitar, i)
}
nuevaCadena = ""
for (i = 0; i < cadena.length; i++) {
if (marcas[i] != true) {
nuevaCadena += cadena.charAt(i)
}
}
return nuevaCadena
}
// Devuelve: 3