Foro de elhacker.net

Programación => Java => Mensaje iniciado por: soser en 16 Julio 2011, 08:59 am



Título: Sustituir palabras en palabras...
Publicado por: soser en 16 Julio 2011, 08:59 am
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:
Código:
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


Título: Re: Sustituir palabras en palabras...
Publicado por: Valkyr en 16 Julio 2011, 14:49 pm
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
  1. String cadena = new String("aaaSbc"); //Declaración de la cadena
  2. 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  :).


Título: Re: Sustituir palabras en palabras...
Publicado por: soser en 16 Julio 2011, 22:59 pm
 :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 :)


Título: Re: Sustituir palabras en palabras...
Publicado por: bengy 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



Título: Re: Sustituir palabras en palabras...
Publicado por: Valkyr en 18 Julio 2011, 02:06 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.