Comparar String

28 respostas
J

Olá Pessoal,
Gostaria de saber como faço para comparar duas String, porém precisaria saber a quantidade de letras que combinam.

Ex:
String cod = “0f12356710”

String comparada = “0ga26710”

Nesse caso o 6710 é a sequencia e são 4 letras precisa saber esse numero.

Obrigado

28 Respostas

marcosharbs

num entendi direito sua duvida
para comparara String utilize o metodo equals() ex.:

if(string1.equals(string2)){
   System.out.println("elas são iguais!");
} else{
   System.out.println("elas não são iguais!");
}
Focao

tbm naõ entendi

meio loko isso ai…

mas ficaria assim:

String cod = "0f12356710"; 
String comparada = "0ga26710";
if(cod.substring(6).equals(comparada.substring(4))){
 System.out.println("é =");
}

o ideal era sabe o padrão que chega as strings…

pra não fiar esse num 6 e 4 voando por ai…

J

Na verdade, não é só saber se são iguais ou não, preciso saber se as palavras que eu recebo possuem alguma sequencia.

String pn = “[telefone removido]”;

List list = new ArrayList();

list.add("[telefone removido]"); sequencia = 0
list.add("GA11207"); sequencia = 0
list.add("[telefone removido]"); sequencia = 0
list.add("615040K010"); sequencia = 1
list.add("[telefone removido]"); sequencia = 0
list.add("[telefone removido]"); sequencia = 1
list.add("7314[b]1212520[/b]"); sequencia = 7
list.add("[telefone removido]"); sequencia = 1
list.add("718620[b]12520[/b]"); sequencia = 5
list.add("[telefone removido]");
list.add("[telefone removido]"); sequencia = 1
list.add("52119509[b]20[/b]");sequencia = 2
list.add("5211950[b]520[/b]"); sequencia = 3

Entenderam a idéia?

Vlw!!!

Focao

agora vendo melhor acho que vc pode colocar

public static Integer lenString = 4;

ou

String cod = "0f12356710";
String comparada = "0ga26710";
String strNum = "6710";
if (cod.substring(cod.length() - strNum.length(), cod.length()).equals(
	comparada.substring(cod.length() - strNum.length(), cod.length()))) {
	System.out.println("é =");
}
Lavieri

JAVA DIGAO:
Na verdade, não é só saber se são iguais ou não, preciso saber se as palavras que eu recebo possuem alguma sequencia.

String pn = “[telefone removido]”;

List list = new ArrayList();

list.add("[telefone removido]"); sequencia = 0
list.add("GA11207"); sequencia = 0
list.add("[telefone removido]"); sequencia = 0
list.add("615040K010"); sequencia = 1
list.add("[telefone removido]"); sequencia = 0
list.add("[telefone removido]"); sequencia = 1
list.add("7314[b]1212520[/b]"); sequencia = 7
list.add("[telefone removido]"); sequencia = 1
list.add("718620[b]12520[/b]"); sequencia = 5
list.add("[telefone removido]");
list.add("[telefone removido]"); sequencia = 1
list.add("52119509[b]20[/b]");sequencia = 2
list.add("5211950[b]520[/b]"); sequencia = 3

Entenderam a idéia?

Vlw!!!

antes de te dar uma resposta… so me esclarece uma coisa… a sequencia pra vc so conta os ultimos números ?? por exemplo 73141212512341 não conta ?? mesmo 12125 sendo parte da sequencia ??

c não contar é so vc fazer de traz pra frente a string, e ir checando letra a letra se base… com um contador imbutido, que o numero do contador será sua resposta

J

Realmente não conta…mas como faço esse contador se o tamanho da string pode variar?

obrigado

J

e a sequencia sempre tem que ser da direita para esquerda.

vlw pessoal

B

São sempre os 4 últimos números?

Poderia usar um string.substring(string.length - 4).equals(string2.substring(string2.length - 4))

Focao
String pn = "[telefone removido]";
		HashMap<Integer, String> pnHashMap = new HashMap<Integer, String>();
		int[] w = new int[pn.length()];
		for (int i = 0; i < w.length; i++) {
			pnHashMap.put(i, pn.substring(0, i+1));
		}

pq o Map conteria as suas seguencias…
seq1 = 6
seq2 = 61
seq3 = 614

depois percorre o Array e ve se encontra a seguencia

Lavieri

Ps.: Enchi o código com comentários, pois não sei ate aonde vc vai entender ele ^^

public static int verifySequence(String pn, String coparacao) { //verifica quem é o menor pn ou comparacao e guarda este valor, pois a sequencia sera no maximo esse numero int sequenciaMaxima = (pn.length() < coparacao.length()) ? pn.length(): coparacao.length(); int cursor = 1; //cursor começa em 1, pois teremos que fazer length - cursor, e charAt(length) da outOfBand pq o indice vai de 0 ate length-1 boolean needMoreTeste = sequenciaMaxima > 0; //se o maximo da sequencia for 0 não precisa testar while(needMoreTeste) { //Verifica se os caracters das posições são igauis if (pn.charAt(pn.length() - cursor) == coparacao.charAt(coparacao.length()-cursor)) { cursor++; //prepara o cursor pra checar o proximo indice needMoreTeste = cursor <= sequenciaMaxima; //se o cursor passou do limite de teste, então para o teste } else needMoreTeste = false; //já que os caracters para esta posição não batem, não há necessidade de testes } return cursor - 1; //reduz 1 do cursor, pois ele iniciou do 1, ^^ }

pequeno teste

String pn = "[telefone removido]"; System.out.println(verifySequence(pn, "[telefone removido]")); System.out.println(verifySequence(pn, "1413443566520")); System.out.println(verifySequence(pn, "112320")); System.out.println(verifySequence(pn, "[telefone removido]")); System.out.println(verifySequence(pn, "12520")); System.out.println(verifySequence(pn, "987"));

respostas

5 3 2 4 5 0

L

poderia fazer algo assim:

public String comparar(String string)
{

String string = "";

for(int count = 0; count < string.length; count++)
    if(string.substring(count, count + 1).equals(sequencia.substring(count, count + 1)))
{
           string += string.substring(count, count + 1);
}


return string;

}

esse metodo retornaria uma String de caracteres iguais

J

Focão , não conseguir compreender e simular código :oops:

J

Perfeito Lavieri ,
Mto bom!!!
OBrigado à todos!!!

Lavieri

JAVA DIGAO:
Perfeito Lavieri ,
Mto bom!!!
OBrigado à todos!!!

Edit a seguinte linha

boolean needMoreTeste = true;

por

boolean needMoreTeste = sequenciaMaxima > 0;

… é a linha logo abaixo de int cursor = 1; … caso contrario ele vai tentar testar a String “”, e vai dar AutOfBand… quando a stirng enviada é em branco não há necessidade de testes… por isso o start do needMoreTeste deve ser sequenciaMaxima > 0;

J

Olá Lavieri ,
Mas como aprendizado, tentei aqui e não consegui se for comparar normal da esquerda para direita…é o mesmo procedimento…

Obrigado mais uma vez

Lavieri

da esquerda pra direita é + facil

public static int verifySequence(String pn, String coparacao) { int maximo = (pn.lenght() < comparacao.length()) ? pn.lenght()-1 : comparacao.length()-1; int cursor = 0; boolean needMoreTeste = cursor < maximo while(needMoreTeste) { if (pn.charAt(cursor) == comparacao.charAt(cursor)) needMoreTeste = ++cursor < maximo; else needMoreTeste = false; } return cursor; }

J

Olá Amigos,
Mais uma dúvida, se eu quiser comparar da esquerda para direita como faço?tentei fazer por aqui e não consegui.

Grato
Rodrigo

J

Valew Lavieri
Obrigadão mesmo!!!

J

Cara eu testei por aqui e entra em um loop infinito…rs
Tem como dah um help?

Grato

Lavieri

JAVA DIGAO:
Cara eu testei por aqui e entra em um loop infinito…rs
Tem como dah um help?

Grato

editei o código 4 vezes ^^ … é que escrevi sem IDE… o ultimo esta correto (axo eu)

H

Ou…

private static void verificarSequencia(String base, String secundaria){
		
		List<String> lstBase = new ArrayList<String>();
		
		base = new StringBuffer(base).reverse().toString();
		
		for(int i = 1; i <= base.length(); i++)
			lstBase.add(new String( base.substring(0, i) ));
		
		List<String> lstSecundaria = new ArrayList<String>();
		
		secundaria = new StringBuffer(secundaria).reverse().toString();

		for(int i = 1; i <= secundaria.length(); i++)
			lstSecundaria.add(new String( secundaria.substring(0, i) ));
		
		String sequencia = new String("sequencia = 0");
		
		for(int i = 0; i < lstBase.size() ; i++)
			for( int j = 0; j < lstSecundaria.size(); j++ )
				if( lstBase.get(i).toString().equals(lstSecundaria.get(j).toString()))
					sequencia = new StringBuffer(lstSecundaria.get(j)).reverse().toString()
						.concat(" sequencia = ").concat("" + lstSecundaria.get(j).toString().length());
		
		System.out.println(sequencia);
	}

Testando…

public static void main(String[] args) {
		String pn = "[telefone removido]"; 

		List list = new ArrayList(); 

		list.add("[telefone removido]"); //sequencia = 0 
		list.add("GA11207"); //sequencia = 0 
		list.add("[telefone removido]"); //sequencia = 0 
		list.add("615040K010"); //sequencia = 1 
		list.add("[telefone removido]"); //sequencia = 0 
		list.add("[telefone removido]"); //sequencia = 1 
		list.add("[telefone removido]"); //sequencia = 7 
		list.add("[telefone removido]"); //sequencia = 1 
		list.add("[telefone removido]"); //sequencia = 5 
		list.add("[telefone removido]"); 
		list.add("[telefone removido]"); //sequencia = 1 
		list.add("[telefone removido]");//sequencia = 2 
		list.add("[telefone removido]"); //sequencia = 3 
		
		for(int i = 0; i < list.size(); i++)
			verificarSequencia(pn,list.get(i).toString());
	}
J

cara vlw pela ajuda mesmo, porém da esquerda para direita a comparação ainda não rola :oops:

vlw

J

Aee deu certo
Vlw camarada!!!

H

Realmente…achei que a busca fosse sempre da direita para a esquerda.

Nesse caso, da esquerda para a direita é mais fácil, basta remover o código que inverte a String.

private static void verificarSequencia(String base, String secundaria){
		
		List<String> lstBase = new ArrayList<String>();
		
		for(int i = 1; i <= base.length(); i++)
			lstBase.add(new String( base.substring(0, i) ));
		
		List<String> lstSecundaria = new ArrayList<String>();
		
		for(int i = 1; i <= secundaria.length(); i++)
			lstSecundaria.add(new String( secundaria.substring(0, i) ));
		
		String sequencia = new String("sequencia = 0");
		
		for(int i = 0; i < lstBase.size() ; i++)
			for( int j = 0; j < lstSecundaria.size(); j++ )
				if( lstBase.get(i).equals(lstSecundaria.get(j)))
					sequencia =lstSecundaria.get(j).concat(" sequencia = ").concat("" + lstSecundaria.get(j).length());
		
		System.out.println(sequencia);
	}

Inté!!!

Focao

Putz foi mal nem respondi…

a idéia era usar o map…

String pn = "[telefone removido]";
		List list = new ArrayList();   
		  
	    list.add("[telefone removido]"); //sequencia = 0   
	    list.add("GA11207"); //sequencia = 0   
	    list.add("[telefone removido]"); //sequencia = 0   
	    list.add("615040K010"); //sequencia = 1   
	    list.add("[telefone removido]"); //sequencia = 0   
	    list.add("[telefone removido]"); //sequencia = 1   
	    list.add("[telefone removido]"); //sequencia = 7   
	    list.add("[telefone removido]"); //sequencia = 1   
	    list.add("[telefone removido]"); //sequencia = 5   
	    list.add("[telefone removido]");   
	    list.add("[telefone removido]"); //sequencia = 1   
	    list.add("[telefone removido]");//sequencia = 2   
	    list.add("[telefone removido]"); //sequencia = 3   

		long start1 = System.currentTimeMillis();   
		for(int i = 0; i < list.size(); i++)   
			verifySequence(pn,list.get(i).toString());   
		long delay1 = System.currentTimeMillis() - start1;   
		System.out.println("verifySequence Demorou " + delay1 + " milissegundos");  
		
		long start2 = System.currentTimeMillis();   
		HashMap<String, Integer> pnHashMap = criaMap(pn);
		for(int i = 0; i < list.size(); i++)   
			verificaSequencia(pn,list.get(i).toString(),pnHashMap);   
		
		long delay2 = System.currentTimeMillis() - start2;
		System.out.println("verificaSequencia Demorou " + delay2 + " milissegundos");
public static Integer verificaSequencia(String pn, String element, HashMap<String, Integer> pnHashMap) {
		String key = "";
		int[] w = new int[element.length()];
		int cursor = 0;
		for (int i = 0; i <= w.length; i++) {
			key = element.substring(w.length - i, w.length);
			if (pnHashMap.containsKey(key)) {
				cursor++;
			}
		}
		return cursor;
	}

	public static HashMap<String, Integer> criaMap(String pn) {
		HashMap<String, Integer> pnHashMap = new HashMap<String, Integer>();
		int[] w = new int[pn.length()];
		for (int i = w.length; i > 0; i--) {
			pnHashMap.put(pn.substring(w.length - i, w.length), i);
		}
		return pnHashMap;
	}

parece q o while demora mais…

mas ficou show tbm…

Lavieri
JAVA DIGAO:
cara vlw pela ajuda mesmo, porém da esquerda para direita a comparação ainda não rola :oops:

vlw


ta ai as 2 formas

import java.util.ArrayList;
import java.util.List;

public class Teste {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String pn = "[telefone removido]";   
		  
	    List<String> list = new ArrayList<String>();   
	  
	    list.add("[telefone removido]"); //sequencia = 0   
	    list.add("GA11207"); //sequencia = 0   
	    list.add("[telefone removido]"); //sequencia = 0   
	    list.add("615040K010"); //sequencia = 1   
	    list.add("[telefone removido]"); //sequencia = 0   
	    list.add("[telefone removido]"); //sequencia = 1   
	    list.add("[telefone removido]"); //sequencia = 7   
	    list.add("[telefone removido]"); //sequencia = 1   
	    list.add("[telefone removido]"); //sequencia = 5   
	    list.add("[telefone removido]");   
	    list.add("[telefone removido]"); //sequencia = 1   
	    list.add("[telefone removido]");//sequencia = 2   
	    list.add("[telefone removido]"); //sequencia = 3   
	    for(String s : list) {
	    	System.out.println(s + " sequencia esquerda = " 
	    			+ verifySequenceEsquerda(pn, s) +
	    			" sequencia direita = "  + verifySequenceDireita(pn, s));
	    }
	}
	public static int verifySequenceEsquerda(String pn, String coparacao) {    
	    int maximo = (pn.length() < coparacao.length()) ? pn.length()-1 : coparacao.length()-1;  
	    int cursor = 0;  
	    boolean needMoreTeste  = cursor < maximo;
	    while(needMoreTeste) {  
	       if (pn.charAt(cursor) == coparacao.charAt(cursor))  
	          needMoreTeste = ++cursor < maximo;  
	       else  
	          needMoreTeste  = false;  
	    }  
	    return cursor;  
	}
	public static int verifySequenceDireita(String pn, String coparacao) {  
	    int sequenciaMaxima  = (pn.length() < coparacao.length()) ? pn.length(): coparacao.length();  
	    int cursor = 1;  
	    boolean needMoreTeste = sequenciaMaxima > 0;
	    while(needMoreTeste) {  
	        if (pn.charAt(pn.length() - cursor) == coparacao.charAt(coparacao.length()-cursor)) 
	            needMoreTeste = ++cursor <= sequenciaMaxima; 
	        else  
	            needMoreTeste = false; 
	    }  
	    return cursor - 1;
	}
}
saida do console
[telefone removido] sequencia esquerda = 1 sequencia direita = 0
GA11207 sequencia esquerda = 0 sequencia direita = 0
[telefone removido] sequencia esquerda = 0 sequencia direita = 0
615040K010 sequencia esquerda = 2 sequencia direita = 1
[telefone removido] sequencia esquerda = 2 sequencia direita = 0
[telefone removido] sequencia esquerda = 0 sequencia direita = 1
[telefone removido] sequencia esquerda = 0 sequencia direita = 9
[telefone removido] sequencia esquerda = 0 sequencia direita = 1
[telefone removido] sequencia esquerda = 0 sequencia direita = 5
[telefone removido] sequencia esquerda = 2 sequencia direita = 1
[telefone removido] sequencia esquerda = 0 sequencia direita = 0
[telefone removido] sequencia esquerda = 0 sequencia direita = 2
[telefone removido] sequencia esquerda = 0 sequencia direita = 3
H
public class Principal {

	private static boolean HORARIO = true;
	private static boolean ANTI_HORARIO = false;
	
	public static void main(String[] args) {
		String pn = "[telefone removido]"; 

		List list = new ArrayList(); 

		list.add("[telefone removido]"); //sequencia = 0 
		list.add("GA11207"); //sequencia = 0 
		list.add("[telefone removido]"); //sequencia = 0 
		list.add("615040K010"); //sequencia = 1 
		list.add("[telefone removido]"); //sequencia = 0 
		list.add("[telefone removido]"); //sequencia = 1 
		list.add("[telefone removido]"); //sequencia = 7 
		list.add("[telefone removido]"); //sequencia = 1 
		list.add("[telefone removido]"); //sequencia = 5 
		list.add("[telefone removido]"); 
		list.add("[telefone removido]"); //sequencia = 1 
		list.add("[telefone removido]");//sequencia = 2 
		list.add("[telefone removido]"); //sequencia = 3 
		
		for(int i = 0; i < list.size(); i++)
			verificarSequencia(pn,list.get(i).toString(),HORARIO);
		
		System.out.println("**************************************");
		
		for(int i = 0; i < list.size(); i++)
			verificarSequencia(pn,list.get(i).toString(),ANTI_HORARIO);
	}
	
	private static void verificarSequencia(String base, String secundaria, boolean sentido){
		
		List<String> lstBase = new ArrayList<String>();
		
		if(sentido == HORARIO)
			base = new StringBuffer(base).reverse().toString();
		
		for(int i = 1; i <= base.length(); i++)
			lstBase.add(new String( base.substring(0, i) ));
		
		List<String> lstSecundaria = new ArrayList<String>();

		if(sentido == HORARIO)
			secundaria = new StringBuffer(secundaria).reverse().toString();

		for(int i = 1; i <= secundaria.length(); i++)
			lstSecundaria.add(new String( secundaria.substring(0, i) ));
		
		String sequencia = new String("");
		
		for(int i = 0; i < lstBase.size() ; i++)
			for( int j = 0; j < lstSecundaria.size(); j++ )
				if( lstBase.get(i).equals(lstSecundaria.get(j)))
					sequencia = lstSecundaria.get(j);
		
		if(sentido == HORARIO)
			System.out.println(new StringBuffer(sequencia).reverse().toString().concat(" sequencia = ").concat("" + sequencia.length()));
		else
			System.out.println(sequencia.concat(" sequencia = ").concat("" + sequencia.length()));
	}
}
J

Vlw Cara!!!
Obrigado mesmo pela ajuda

Criado 28 de janeiro de 2009
Ultima resposta 29 de jan. de 2009
Respostas 28
Participantes 7