Como apagar letras dentro de uma string em java sem utilizar as implementacoes da classe String

Ola a todos !

Sou iniciante em java e estou estudando alguns execicios, e tenho um que consiste em apagar letras de uma palavra ou sequencia de palavras dentro de uma string.
Tenho uma interface que tem um metodo com duas variaveis string, uma recebe as palavras e outra recebe uma sequencia de de caracteres que terao que ser buscados na primeira string e serem removidas. Exemplo var1 recebe “teste” e a var2 recebe “tes” e entao sera removida na primeira e a var1 ficara apenas “te”.
Nao posso utilizar nenhum metodo da classe String, somente posso usar o charAt() e a concatenacao. Fiz alguns testes mas nao cheguei a nada pois ate consigo pegar os caracteres mas nao estou sabendo retirar na string. Segue os testes.

public interface CLimpa {
	String limpar(String string, String substring);
}
public class LimparLetras implements CLimpa {

	@Override
	public String limpar(String string, String substring) {
		/* string=string.replace(substring,""); */
		return string;
	}
}
public class LimpaLetras {

	public static void main(String[] args) {
		char letra;
		char letra2;
		String string;
		String string2;
		int indice;

		string=("teste");
		string2=("oes");
		indice=2;

		letra=string.charAt(indice);
		letra2=string2.charAt(indice);


		if(letra == letra2) {
			System.out.println("letras iguais");

		} else {
			System.out.println("letras diferentes");
		}	 

	}

}

Como uma String é imutável, vc deve criar outra ignorando as letras que devem ser “removidas”.

Tente seguir esses passos:

  • crie uma string para receber a nova palavra
  • faça o loop percorrer a palavra a ser tratada obtendo cada letra
  • verifique se a letra está contida (pode usar o método indexOf) na segunda string (a que contém as letras que devem ser removidas)
if (palavra.indexOf(letraChar) != -1) // verifica se o char existe na String palavra
  • em uma condição, concatene apenas as letras que não estiverem na segunda string na string que irá receber o resultado

Ola

Tentei fazer mas nao entendi muito bem pq estou bem confuso nessa, comecei algo mas nao deu certo, como eu poderia fazer ?

public class RemoveLetras implements GLimpa {

@Override
public String limpar(String string, String substring) {
	
	// percorrer a string informada
	
	for (int i=0; i< string.length(); i++) {
	
	
	}				
						
				return string;
			}

}

public class LimpaLetras {

public static void main(String[] args) {
	
	
	  GLimpa remover=new RemoveLetras(); String
	  limpando=remover.limpar("teste","tes");
	  System.out.println(limpando);
	 

	}
}

No método limpar faltou implementar essas partes:

  • crie uma string para receber a nova palavra (crie antes do FOR)
  • verifique se a letra está contida (pode usar o método indexOf ) na segunda string (a que contém as letras que devem ser removidas)

No seu for, vc consegue pegar cada letra usando o método charAt:

char letra = string.charAt(i);

Olá

O problema que a única método que posso usar da classe string e o chatAt(), o indecifrável não poderia usar e preciso imprimir as palavras sem as letras da substring.

Em relação à segunda string, o que deve ser removidos, são as letras que forem iguais? ou tem que tratar a string completa?

No exemplo q vc citou onde a primeira string é teste e a segunda é tes, o resultado deve ser te. Então o tes foi tratada de forma junta e não cada letra à parte para remover da primeira string, senão todas as letras seriam removidas.

Foi mal, achei meio confuso esse exercício agora.

Para quem está a inicial, isto será a forma como se poderá entender melhor

 public String limpar(String string, String substring) {
    String result = ""; // começar com string vazia

    for (int i = 0; i < string.length(); i++) { // percorrer a string informada
        boolean equals = true; // flag que indica se encontramos algum carater diferente.
        for (int j = 0; j < substring.length(); j++) { // percorrer a substring a remover
            if (string.length() <= (i + j) || string.charAt(i + j) != substring.charAt(j)) { // se os caracteres forem diferentes
                equals = false; // flag a false
                break; // se já encontramos um que não corresponde, podemos parar de percorrer o array
            }
        }
        if (equals) { // Se todos os caracters de substring são iguais à string
            i = i + substring.length() - 1; // saltamos esses carateres na string informada
        } else { // se são diferentes
            result += string.charAt(i); // adiciona o carater que estamos a percorrer ao resultado
        }
    }

    return result;
  }
1 curtida