Comparar valor de String

4 respostas
caiomacedor

Boa tarde galera. Tenha essas duas String que são retornadas do base de dados string1 ="01 21 52 12 36 55" E string2 = "26 44 46 49 55 56";

preciso pegar os valores comuns entre as duas. Qual a melher forma para fazer isso? transforma-las em Array e depois percorrer nelas pegando os valores? ou tem uma outra forma mas pratica ou mas bonito.

4 Respostas

B

Uma solução é utilizar a classe StringTokenizer
Ex:

StringTokenizer st = new StringTokenizer(string1, " ");//vai separar a string nos valores desejados, delimitando pelo espaço entre os valores. String elemento = null; while (st.hasMoreTokens()) { elemento = st.nextToken(); }

Aí faz a mesma coisa para a string2 e compara os valores dela com os da string1.

E

caiomacedor:
Boa tarde galera. Tenha essas duas String que são retornadas do base de dados string1 ="01 21 52 12 36 55" E string2 = "26 44 46 49 55 56";

preciso pegar os valores comuns entre as duas. Qual a melher forma para fazer isso? transforma-las em Array e depois percorrer nelas pegando os valores? ou tem uma outra forma mas pratica ou mas bonito.

Vamos lá.

import java.util.*;

class ValoresComuns {
    public static void main(String[] args) {
        String s1 = "01 21 52 12 13 36 55";
        String s2 = "26 13 44 46 49 55 56";
        String[] v1 = s1.split (" ");
        String[] v2 = s2.split (" ");
        Set<String> set1 = new TreeSet<String> (Arrays.asList (v1));
        Set<String> set2 = new TreeSet<String> (Arrays.asList (v2));
        set1.retainAll (set2);
        System.out.println (set1); // Deve imprimir "[13, 55]"
        // Se você não sabe trabalhar com Set, então vou converter em um Array para você. 
        String[] s3 = set1.toArray (new String[0]);
        for (int i = 0; i < s3.length; ++i) {
            System.out.println (i + ":" + s3[i]);
        }
    }
}
renamed
Não é a solução mais bonita, mas tmb não é custosa... Faz um loop e compara elemento por elemento... espaços fazem diferenca? Letras maísuculas/minúsculas? Se não, ai fica fácil... nem precisa transformar em Array...
public static void main(String[] args) {
		String a = "a b c 1 2 3";
		String b = "a b c 1 3 2";
		
		int indiceDiferenca = comparaStrings(a, b); 
		if (indiceDiferenca == -1){
			System.out.println("São iguais");
		}else{
			System.out.println("Diferença em " + indiceDiferenca);
		}
		
		a = "a b";
		b = "a b";
		
		indiceDiferenca = comparaStrings(a, b); 
		if (indiceDiferenca == -1){
			System.out.println("São iguais");
		}else{
			System.out.println("Diferença em " + indiceDiferenca);
		}
	}
	
	/**
	 * Método que vai comparar duas strings
	 * @param s1
	 * @param s2
	 * @return
	 * O índice em que foi encontrada a primeira ocorrência de diferença.
	 * Se as strings forem iguais, retornará -1.
	 */
	public static int comparaStrings(String s1, String s2){
		int i = 0;
		/*
		 * Vai um por um passeando pelos dois vetores
		 */
		while ((i < s1.length()) && (i < s2.length())){
			if (s1.charAt(i) != s2.charAt(i)){
				return i;
			}
			i++;
		}
		
		/*
		 * Se chegar aqui, ou são iguais ou um é menor que o outro (nesse caso, diferentes)
		 */
		if (s1.length() == s2.length()){
			return -1;
		}
		
		/*
		 * Se chegar aqui, um é menor que o outro... "i" conterá o último índice do menor vetor
		 */
		return i; 
	}

ok?

caiomacedor

Muito obrigado a todos galera, Mas a a forma que as se adequa a minha nescessidade é a forma que o “entanglement” mencionou. Isso porque eu preciso separar os valores comuns. Veja como ficou:

String[] string1 = "01 21 52 12 36 55".split(" "); String[] string2 = "26 21 46 49 55 01".split(" "); Set<String> set1 = new TreeSet<String> (Arrays.asList(string1)); Set<String> set2 = new TreeSet<String> (Arrays.asList(string2)); List<String> comuns = new ArrayList<String>(); set1.retainAll(set2); for (String string : set1) { comuns.add(string); } System.out.println(comuns);

Criado 4 de novembro de 2009
Ultima resposta 4 de nov. de 2009
Respostas 4
Participantes 4