Foros del Web » Programación para mayores de 30 ;) » Java »

buscar subcadena y reemplazar

Estas en el tema de buscar subcadena y reemplazar en el foro de Java en Foros del Web. Hola a todos, Estoy intentando encontrar una subcadena dentro d eun string y reemplazarlopor otra,alguien sabe como hacerlo, e encontrado una clase regex o algo ...
  #1 (permalink)  
Antiguo 24/04/2006, 08:50
 
Fecha de Ingreso: marzo-2006
Mensajes: 37
Antigüedad: 18 años, 2 meses
Puntos: 0
Exclamación buscar subcadena y reemplazar

Hola a todos,

Estoy intentando encontrar una subcadena dentro d eun string y reemplazarlopor otra,alguien sabe como hacerlo, e encontrado una clase regex o algo asi que mas o menos lo hacer pero es en 1.5 y no puedo utilizarla,alguien mepuede ayudar??????

Gracias de antemano or la ayua
  #2 (permalink)  
Antiguo 24/04/2006, 09:09
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
Hola, puedes hacerlo con replaceAll(cadena1, cadena2);

Por ejemplo:

String cadena = "aabbccddeeaagg";
cadena.replaceAll("aa", "jj");
System.out.println(cadena);

Esto te devolverá: jjbbccddeejjgg

Lo he probado con la SDK 1.4, buena suerte!
__________________
El último TipdaR
  #3 (permalink)  
Antiguo 24/04/2006, 09:11
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 10 meses
Puntos: 24
podes usar el metodo replace de la clase String.

Por ejemplo:
Código:
String strOriginal = new String("Esto es una basofia");
String strModificada;
strModificada = strOriginal.replace("Esto","Aquello");
el metodo replace te duevuelve una nueva cadena, no modifica la cadena original, si quiees reemplazarlo en la cadena original peude hacer esto:

Código:
strOriginal = strOriginal.replace("Esto","Aquello");
Saludos
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #4 (permalink)  
Antiguo 24/04/2006, 09:12
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 10 meses
Puntos: 24
Respondimos al mismo tiempo, jeje
__________________
http://blog.tolaware.com.ar -> Blog de Java, Ruby y Linux
  #5 (permalink)  
Antiguo 24/04/2006, 09:34
 
Fecha de Ingreso: marzo-2006
Mensajes: 37
Antigüedad: 18 años, 2 meses
Puntos: 0
una ultima duda

Si la cadena aparece mas de una vez,esto lo sustituye todas o hay que hacerlo x veces????????

Graciaspor la ayuda.
  #6 (permalink)  
Antiguo 24/04/2006, 09:42
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
He probado y puedes usar cualquiera de los dos métodos, replace ó replaceAll, como gustes...

Espero que hallamos podido ayudarte!

Hay otras maneras de hacerlo, pero serían engorrosas teniendo en cuenta que tendrías que implementar la funcionalidad por tu cuenta. Eso que dices de la clase regex es más bien si lo que quieres reemplazar sigue algún patrón, para ello tienes que usar expresiones regulares. Por ejemplo, si quieres reemplazar todas las veces que aparezcan un número indeterminado de "z" seguidas de un número indeterminado de "2" (pero que al menos tenga una combinación z2) por cualquier cosa sería algo así:

String resultado = Pattern.compile("z+2+").matcher("abcdz22efgzzz2"). replaceAll("R");

Esto te devolvería: abcdRefgR

Ten en cuenta que la expresión regular z+2+ admite, por ejemplo:
z2
zz2
z22
zzz222
z22222
zzzz22
...

etc, etc, etc...
__________________
El último TipdaR
  #7 (permalink)  
Antiguo 24/04/2006, 09:44
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
Cita:
Iniciado por Alkalinux
Si la cadena aparece mas de una vez,esto lo sustituye todas o hay que hacerlo x veces????????

Graciaspor la ayuda.
Por supuesto que lo sustituye todas las veces que aparece... Deberías probar los snippets que te damos aquí...
__________________
El último TipdaR
  #8 (permalink)  
Antiguo 24/04/2006, 09:48
 
Fecha de Ingreso: marzo-2006
Mensajes: 37
Antigüedad: 18 años, 2 meses
Puntos: 0
De acuerdo

Al final me e montado algo asi como esto
while((l=p.indexOf(cadena))!=-1)
{
p=p.substring(0,l).concat(p.substring(l+la));
}
teniendo en cuenta que la cadena me podia aparecer varias veces,y que pe es la cadena original y la es la longitud de la cadena.

De todas fromas gracis por la ayuda me a servido de mucho.
Supongo que el codigo que acabo deponer sera una chapucilla preo funciona.
  #9 (permalink)  
Antiguo 24/04/2006, 10:21
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
Como gustes, pero el replaceAll hace los cambios tantas veces como aparezca. Estás, para decirlo de alguna manera, reinventando la rueda.
__________________
El último TipdaR
  #10 (permalink)  
Antiguo 25/04/2006, 00:06
 
Fecha de Ingreso: marzo-2006
Mensajes: 37
Antigüedad: 18 años, 2 meses
Puntos: 0
Ya se que estoy reinventando la rueda,pero el replaceAll no me funciona,por que estoy trabajando con la version1.3.12 o algo asi y no esta la opcion replaceall,asiq ue me lo e tendio que montar,asi,

De todas formas muchas gracias por la ayuda.
  #11 (permalink)  
Antiguo 25/04/2006, 01:01
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Yo, antes de existiera el replaceAll hice esta version:
Código:
  static String replace(String original, String replaced, String replacement)
  {
    StringBuffer theSB = new StringBuffer(original);
    int baseIndex = 0;
    int badSignIndex = 0;
    while ((badSignIndex = original.indexOf(replaced, badSignIndex)) != -1)
    {
      theSB.deleteCharAt(badSignIndex + baseIndex);
      theSB.insert(badSignIndex + baseIndex, replacement);
      baseIndex = baseIndex + replacement.length() - 1;
      badSignIndex = badSignIndex + 1;
    }
    return theSB.toString();
  }
La ventaja que tiene es que como no usa expresiones regulares y usa StringBuffer en vez de String, es mucho más eficiente que el replaceAll. Eso si, si necesitas expresiones regulares entonces no vale y es más comodo usar lo que te dan las ultimas versiones del API.

Saludos
  #12 (permalink)  
Antiguo 02/05/2006, 03:37
 
Fecha de Ingreso: marzo-2006
Mensajes: 37
Antigüedad: 18 años, 2 meses
Puntos: 0
De acuerdo

Hla greenEyed,
la funcion que tu me has pasado es mas o menos como loq ue estaba haciendo y la vedad que funciona mejor que mi algoritmo porque yo no estan usando StringBuffer,gracis por la ayuda,no se me habia ocurrido el usar StringBuffer.
  #13 (permalink)  
Antiguo 02/05/2006, 09:59
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Si . El algoritmo en si no es muy complejo, pero se complica cuando quieres hacerlo eficiente en cuanto a memoria y velocidad. Y por esos dos motivos hay que tener mucho cuidado con los Strings y su concatenación, ya que es muy ineficiente.
Así que si te sirve, estupendo. Yo la uso en aplicaciones web con trafico relativamente intenso y funciona bastante bien sin consumir excesiva memoria.
<S>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:57.