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