1 votos

quitar un patron de un string en java

hola chicos tengo un ejercicio: Dada una cadena y un patrón, escribir un método String eliminaPatron(String s, String p) que devuelva la cadena original s sin el patron p. por ejemplo:

si la cadena es "chanchan" y el patrón es "ch", el método debe devolver "anan"

Yo sé como resolverlo utilizando patrones de una sola letra, pero aquí es complicado porque tiene que ser específicamente esa sucesión de letras. o sea si la cadena es "chanchanc", el método no debe quitar la última 'c'. debe devolver "ananc"

ayuda!! PD: escribí todo mal porque antes lo escribí bien y cuando elegí preguntar esta pagina de m#!$ se colgó y me borró todo lo que escribí.

2voto

ArtEze Puntos 285

Fue bastante difícil, pero al final pude lograrlo. Debe haber una manera de no usar try catch, pero es lo mejor que me salió.

public static String eliminaPatron(String s, String p)
{
    String r="";
    for(int i=0;i<s.length();i++)
    {
        int j;
        for(j=0;j<p.length();j++)
        {
            try
            {
                if( s.charAt(i+j) != p.charAt(j) )
                {
                    break;
                }
            }
            catch(IndexOutOfBoundsException  e)
            {
                break;
            }
        }
        if( j==p.length() )
        {
            i+=p.length()-1;
        }
        else
        {
            r+=s.charAt(i);
        }
    }
    return r;
}

Uso.

System.out.println( eliminaPatron("chanchanc","ch") );

1 votos

Genio Eze por responder, la verdad me tiene muy liado porque quitar una letra o la letra de una determinada posición es relativamente fácil con un charAt... pero ahora quitar un patrón no se me ocurre cómo. sobre todo porque me piden que el patrón tenga un tamaño indefinido. así como te pasé "ch" podría ser "chan" o "han" y tiene que poder quitarlo también. veo que en tu código estás concatenando los caracteres en i+j y eso me va a servir para patrones de dos caracteres. Definitivamente muy útil tu respuesta gracias por responder!

0 votos

El código funciona bien para cualquier patrón. i+j es la posición del caracter de s a comparar con el caracter de p que está en la posición j, lo que hace es detenerse en una letra de s y comparar todas las siguientes de la cadena p. Me hubiera gustado no tener que usar try catch, me aparecían errores porque sobrepasaba la longitud.

1voto

ArtEze Puntos 285

Jeje, para insertar esas letras coloridas hago esto, `codigo`, es tocando dos veces la tecla del elevado, para insertar la tilde invertida sin que desaparezca hago \`, iteramos me divierte.

Pongo lo mismo que antes, pero con if y else, en vez de try catch, y corregí la parte del último if. Explico algunas cosas, que como yo diseñé el código, a mí me parecen obvias.

  • i es la posición de s, que es la cadena ingresada.
  • j es la posición de p, que es el patrón.
  • i+j es la posición de s más la posición de p.

El String r es la cadena a devolver (return), empieza vacía (r = ""), y se va concatenando con s.charAt(i), si las siguientes letras de s ( las posiciones mayores a i) coinciden exactamente con p.

public static String eliminaPatron(String s, String p)
{
    String r="";
    for(int i=0;i<s.length();i++)
    {
        int j;
        for(j=0;j<p.length();j++)
        {
            if( i+j<s.length() )
            {
                if( s.charAt(i+j) != p.charAt(j) )
                {
                    break;
                }
            }
            else
            {
                break;
            }
        }
        if( j==p.length() )
        {
            i+=p.length();
        }
        r+=s.charAt(i);
    }
    return r;
}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: