Comparar duas Strings, se contém algo semelhante

5 respostas
R

Então galera estou tentando comparar duas Strings se há algo semelhante. Estou tentando implementar uma Lista Negra de Software e uma Lista dos Softwares Instalados em um cliente. As duas listas estão prontas, por exemplo:

Lista Negra = Adobe Mozzila Notepad
SoftwareInstalado[0] = Adobe Flash Player 11 Activex
SoftwareInstalado[1] = Adobe Phothoshop
SoftwareInstalado[3] = Notepad++
SoftwareInstalado[4] = Mozilla Firefox
SoftwareInstalado[5] = Adobe AIR

Lembrando que a Lista Negra era uma lista, porém converti ela para uma String.

for(SoftwaresListaNegraDTO palavra : listSoftwareListaNegra) {  
	 texto += palavra.getNomeSoftwaresListaNegra();  
}
return texto;

Já tentei utilizar o contais e o indexOf, porém ele não entra no if:

if (softwareinstalado.contains(softwarelistanegra)) {
		System.out.println("Software ILEGAL " + softwareinstalado);
}

Claro que nao foi implementado desta forma, coloquei chamando o método certinho para capturar a devida palavra. As palavras chegam corretamente, pois debuguei, mas não entra no IF, pois não reconhece que softwareinstalado contém na lista negra.

Como por exemplo
softwareinstalado = Adobe AIR
softwarelistanegra = Adobe

Alguma sugestão?

5 Respostas

drsmachado

Sem que você coloque da forma como fez, não há como dar uma resposta concreta.
Provavelmente a verificação não está correta.

R

Certo drsmachado, chega dessa forma debugando, assim que está implementado.

if ("Adobe".contains("Adobe Flash Player 11 Activex")) { System.out.println("Software ILEGAL " + softwareinstalado); }

Chega exatamente dessa forma, porém não entra no if.

A minha dúvida é: O contains compara como se fosse um “equals” ou “equalsIgnoreCase” ou se existir uma palavra igual dentro de um contexto ele detecta?

Porque se for está muito estranho, tinha que funcionar :stuck_out_tongue:

drsmachado

Claro que não vai funcionar, não é?
Veja bem, a palavra “Ação” contém a frase “Ação é o que o mundo precisa”?
Não.
Logo, isso

"Adobe".contains("Adobe Flash Player 11 Activex")

Jamais será consideradp um true.
Você pode inverter a comparação (talvez não seja boa idéia, mas…)

if("Adobe Flash Player 11 ActiveX".contains("Adobe")){
//Faz algo
}

Esta comparação retornaria true.
E, quanto a isso

A minha dúvida é: O contains compara como se fosse um "equals" ou "equalsIgnoreCase" ou se existir uma palavra igual dentro de um contexto ele detecta?

Você não compara

if("São Paulo".contains("Brasil")

Não é mesmo?

R

Muito obrigado pela resposta drsmachado, clareou bastante minha mente.

Surgiu um problema, comparação de duas frases (Strings).

Por exemplo:

Lista negra = Adobe Reader
Softwareinstalado = adobe R XII

Há alguma função java que acha algo em comum, por exemplo, Adobe é uma palavra comum entre as duas, nisso se ignorar o case e talz. Porém há outras palavras que as diferem…

S

o contains compara como se fosse o equals, ele não ignora cases. Um jeito e você dar .toLowerCase() nas strings antes de comparar, ai todas ficam minúsculas.

Ex:

String s1 = "TeSte";
String s2 = "isso é um teste";

if(s2.toLowerCase().contains(s1.toLowerCase()){

  //Existe a palavra teste na string s2

}
Criado 3 de setembro de 2013
Ultima resposta 5 de set. de 2013
Respostas 5
Participantes 3