Sustituir palabras en palabras...

Iniciado por soser, 16 Julio 2011, 08:59 AM

0 Miembros y 1 Visitante están viendo este tema.

soser

Hola!
Mi duda es la siguiente:
Tengo una string "aaaSbc", y me gustaria sustituir desde donde esta la S por alguna otra string por ejemplo cambiar la S por "bcd", de modo que me quede una string "aaabcdbc"
Lo que hago es lo siguiente:

String original="aaaSbc";
String s="S";
String cambio="bcd";
int n=cambio.lenght()-s.lenght();
char[] nueva=new char[original.lenght()+n];
char[] orig=original.toCharArray();
char[] camb=cambio.toCharArray();
int z=0;
for(int h=0;h<i;h++)//i es la posicion donde esta S
{
     nueva[h]=orig[h];
     z=h;
}
z+=s.lenght();//lo hago con el fin de saber en que posicion seguirle en orig[]
int cont=0,h;
for(h=i;h<(i+cambio.lenght());h++)
{
      nueva[h]=cambio[cont];
      cont++;
}
for(h=h;h<nueva.lenght()<h++)
{
     nueva[h]=orig[z];
      z++;
}
String stg=new String(nueva);

El problema que tengo es que no agarra con todas los strings que ingreso, ya que la S puede estar al inicio,en medio o al final, ademas de que aveces igual se puede cambiar una combinacion de letras, por ejemplo que "aS" se cambie por "cc" de modo que quede "aaccbc" y de igual modo esa combinacion de letras puede estar al inicio,en medio o al final.
Espero su ayuda,comentarios,criticas...
Desde ya gracias ;D

Valkyr

Para hacer trabajos de sustitución de cadenas en Java es recomendable el uso de las clases Pattern y Matcher, pero sí lo que vas a hacer es algo tan sencillo como lo que expones, la propia clase String proporciona métodos de busqueda y sustitución.

Por ejemplo, sí tu quisieses sustituir una S (tal y como dices), en esta cadena: "aaaSbc" tendrías que hacer esto:

Código (java) [Seleccionar]

String cadena = new String("aaaSbc"); //Declaración de la cadena
cadena = cadena.replaceFirst("S", "bcd"); //Método que reemplaza la primera ocurrencia


El método replaceFirst tiene como primer parámetro una expresión regular (si no conoces lo que es, busca por Internet porque la verdad es interesante), el segundo parámetro es la cadena que va a sustituir a la ocurrencia.

Existe otro método, replaceAll, que, como su propio nombre indica, reemplaza todas las ocurrencias que hay en la cadena.

De esta forma no tendrías que andar pensando en como realizarlo, ya que la propia clase te ofrece esta funcionalidad. Sí quisieses implementarlo por ti mismo, supongo que no tendría mucha complejidad en los casos más simples.

Saludos y si hay alguna duda, comenta  :).

soser

 :o
Muchas gracias, he probado el metodo me has dicho y funciona muy bien...Si llego a tener algun otro problema lo comentare, de todos modos gracias :)

.rn3w.

pero si quiero sustituir por todo un arreglo con otro arreglo???

por ejemplo
aabc

[a,a,b,c,f,g]    por [asd,a,r,d]
a sustituir por a
a sustituir por r
b sustituir por d
c sustituir por asd
salida:
ardasdfg


Valkyr

Cita de: bj Wilson A en 18 Julio 2011, 01:54 AM
pero si quiero sustituir por todo un arreglo con otro arreglo???

por ejemplo
aabc

[a,a,b,c,f,g]    por [asd,a,r,d]
a sustituir por a
a sustituir por r
b sustituir por d
c sustituir por asd
salida:
ardasdfg



Es un poco lioso como lo has explicado. Sí te explicas un poco mejor intentaré ayudarte, sí es que puedo claro xD.

Saludos.