Manipulação de Strings

10 respostas
F

Boa noite galera, estou com esse exercicio para fazer mas estou com dúvidas de qual método usar :

? Faça um programa em Java que teste se uma
string é subsequencia de outra (ignore
maiúsculas e minúsculas)

  • Exemplo:
  • A = “Eric”
  • B = “xexrxixcx”
  • C = “xexixrxc”
  • A é subsequencia de B, mas não é de C

Atc, Felipe

10 Respostas

MartinsAndreDablio

Boa noite cara joia, olha ficou um pouco estranho a explicação mas o seguinte tem varias formas de comparar uma String a outra uma delas vou citar a seguir.

String sNome = "Fulano";
String sNome2 = "Ciclano";
if(sNome.equals(sNome2)){
   System.out.println("São iguais");
} else
   System.out.println("São diferentes");

abraço.

F

É O SEGUINTE : TENHO ESSAS 3 STRINGS A = “Eric” , B = “x e x r x i x c x”, e C = “x e x r x c x i x”;

Quero compara-las de modo que o resultado informa que com visto a sequencia da string bem em relação a A excluindo os “x” forma o nome Eric assim como na String A, já a C não mostra eric …

pvrsouza

Primeiro trate a String ‘b’:

b=b.replaceAll("x", "");

DICA.: É necessário atribuir o resultado de b.replaceAll novamente na variável ‘b’ porque Strings em Java são imutáveis.

Depois é só comparar…

:slight_smile:

Matheus_terra

O código abaixo funciona perfeitamente:

public class TratandoString {

	public static void main(String[] args) {
		String A = "Eric", B = "xExrxixcx", C = "xExrxcxix";
		
		ehSequencial(A, B, C);
	}

	public static void ehSequencial(String a, String b, String c) {
		
		if (a.equals(b.replace("x", "")))
			System.out.println("A é subsequencia de B");
		else
			System.out.println("A não é subsequencia de B");
		
		if (a.equals(c.replace("x", "")))
			System.out.println("A é subsequencia de C");
		else
			System.out.println("A não é subsequencial de C");
		
		if(b.equals(c.replace("x", "")))
			System.out.println("B é subsequencia de C");
		else
			System.out.println("B não é subsequencia de C");

	}
	
}

Se você perceber, na atribuição de cada String, eu coloquei o "E" maiúsculo em todas, pois se colocar "e" minusculo, nenhuma vai ser subsequencia da outra, pois como sabemos o Java é case sensitive. Espero ter ajudado.

pvrsouza
Matheus terra:
O código abaixo funciona perfeitamente:
public class TratandoString {

	public static void main(String[] args) {
		String A = "Eric", B = "xExrxixcx", C = "xExrxcxix";
		
		ehSequencial(A, B, C);
	}

	public static void ehSequencial(String a, String b, String c) {
		
		if (a.equals(b.replace("x", "")))
			System.out.println("A é subsequencia de B");
		else
			System.out.println("A não é subsequencia de B");
		
		if (a.equals(c.replace("x", "")))
			System.out.println("A é subsequencia de C");
		else
			System.out.println("A não é subsequencial de C");
		
		if(b.equals(c.replace("x", "")))
			System.out.println("B é subsequencia de C");
		else
			System.out.println("B não é subsequencia de C");

	}
	
}

Se você perceber, na atribuição de cada String, eu coloquei o "E" maiúsculo em todas, pois se colocar "e" minusculo, nenhuma vai ser subsequencia da outra, pois como sabemos o Java é case sensitive. Espero ter ajudado.

Não precisava colocar a letra maiuscula não. Bastava fazer a comparação usando o método toUpperCase(). Assim transforma tudo em maiuscula e pronto.
if (a.toUpperCase().equals((b.replace("x", "")).toUpperCase()))
			System.out.println("A é subsequencia de B");
		else
....
Matheus_terra
pvrsouza:
Matheus terra:
O código abaixo funciona perfeitamente:
public class TratandoString {

	public static void main(String[] args) {
		String A = "Eric", B = "xExrxixcx", C = "xExrxcxix";
		
		ehSequencial(A, B, C);
	}

	public static void ehSequencial(String a, String b, String c) {
		
		if (a.equals(b.replace("x", "")))
			System.out.println("A é subsequencia de B");
		else
			System.out.println("A não é subsequencia de B");
		
		if (a.equals(c.replace("x", "")))
			System.out.println("A é subsequencia de C");
		else
			System.out.println("A não é subsequencial de C");
		
		if(b.equals(c.replace("x", "")))
			System.out.println("B é subsequencia de C");
		else
			System.out.println("B não é subsequencia de C");

	}
	
}

Se você perceber, na atribuição de cada String, eu coloquei o "E" maiúsculo em todas, pois se colocar "e" minusculo, nenhuma vai ser subsequencia da outra, pois como sabemos o Java é case sensitive. Espero ter ajudado.

Não precisava colocar a letra maiuscula não. Bastava fazer a comparação usando o método toUpperCase(). Assim transforma tudo em maiuscula e pronto.
if (a.toUpperCase().equals((b.replace("x", "")).toUpperCase()))
			System.out.println("A é subsequencia de B");
		else
....

Mas se usar toUpperCase, fugirá do enunciado. Coloquei maiúscula pra ficar de acordo com o que ele pediu, pra A ser subsequencia de B, mas do jeito que ele passou os valores da String, nenhum é subsequencia do outro, se levar em consideração minusculas e maiusculas.

ViniGodoy

Galera, obviamente não terá só “x” na String que Eric pode ser subsequencia. No enunciado, o “x” foi só usado para indicar um caractere qualquer, e para ficar fácil de ler o enunciado.

A String A será subsequencia de B, se todas as suas letras aparecerem na ordem, independente de outras letras estarem no meio.

Portanto:
Eric também será uma subsequencia de: ealksjdlajdalr8384742i92382983c.

Assim como Pedro será subsequencia de:
p192812e2397373najheuwyeuwydiuydiufydisurkkjnjnneweo

Me parece que é só uma questão de fazer um for sobre a sequencia B, e controlar com um índice qual letra já foi vista na sequencia A.

ViniGodoy
class Subsequencias {
    public static void main(String args[]) {
        String A = "Eric";
        String B = "eajdhaskjhdsrakjshdkasdhiasljdlsajdsakljc";

        if (subsequencia(A, B)) {
            System.out.println("É subsequencia");
        } else {
            System.out.println("Não é subsequencia");
        }
    }

    private static boolean subsequencia(String a, String b) {
        a = a.toLowerCase();
        b = b.toLowerCase();
        int index = 0;
        for (char ch : b.toCharArray()) {
            if (ch == a.charAt(index)) {
                index++;
            }
        }
        return index == a.length();
    }
}
pvrsouza

ViniGodoy:
Galera, obviamente não terá só “x” na String que Eric pode ser subsequencia. No enunciado, o “x” foi só usado para indicar um caractere qualquer.

A String A será subsequencia de B, se todas as suas letras aparecerem na ordem, independente de outras letras estarem no meio.

Portanto:
Eric também será uma subsequencia de: ealksjdlajdalr8384742i92382983c também é subsequencia.

Assim como Pedro será subsequencia de:
p192812e2397373najheuwyeuwydiuydiufydisurkkjnjnneweo

Me parece que é só uma questão de fazer um for sobre a sequencia B, e controlar com um índice qual letra já foi vista na sequencia A.

Verdade!

F

Galera muito obrigado pela ajuda, deu certo aqui … Vlw mesmo ;D

Criado 26 de março de 2013
Ultima resposta 26 de mar. de 2013
Respostas 10
Participantes 5