Manipulação de Strings

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

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.

É 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 …

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:

O código abaixo funciona perfeitamente:

[code]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");

}

}[/code]

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.

[quote=Matheus terra]O código abaixo funciona perfeitamente:

[code]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");

}

}[/code]

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.
[/quote]

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 ....

[quote=pvrsouza][quote=Matheus terra]O código abaixo funciona perfeitamente:

[code]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");

}

}[/code]

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.
[/quote]

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 ....[/quote]

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.

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.

[code]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();
}

}
[/code]

[quote=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.[/quote]

Verdade!

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