Java - Contar palabras diferentes entre dos String

 
Vista:
sin imagen de perfil

Contar palabras diferentes entre dos String

Publicado por Carlos (3 intervenciones) el 17/12/2016 20:03:13
Buenas,
estoy encallado intentando calcular el numero de palabras distintas entre dos cadenas de texto. Si alguien me puede ayudar.

Mi código es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
 
public class CalcularErroresEntreDosStrings {
    public static void main(String[] args){
        CalcularErroresEntreDosStrings programa = new CalcularErroresEntreDosStrings ();
        programa.inicio();
    }
 
    public void inicio(){
        String frase1 = "Este niño juega a la pelota en la calle.";
        String frase2 = "Esta nina juga ala pelota en la cale.";
        long errores = comprobarErrores(frase1, frase2);
        System.out.println("Has fallado en " + errores + " palabras.");
    }
 
 
    long comprobarErrores(String str1,String str2){
        String [] palabrasStr1 = str1.split(" ");
        String [] palabrasStr2 = str2.split(" ");
        int errores = 0;
 
 	for(int i = 0; i < palabrasStr1.length; i++){
            for(int j = 0; j < palabrasStr2.length;j++){
                if( palabrasStr1[i].equals(palabrasStr2[j])){
                    System.out.println("La palabra" + palabrasStr1[i] + " es igual a " + palabrasStr2[j]);
                } else if(palabrasStr1[i] != palabrasStr2[j]){
                    errores++;
                }
            }
        }
        return errores;
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Contar palabras diferentes entre dos String

Publicado por Rubén (24 intervenciones) el 19/12/2016 10:20:19
Hola Carlos,

Al probar tu código, si se está realizando la comprobación entre palabras, el problema que tienes es que NO valida la frase1[palabra1] con la frase2[palabra1] exclusivamente, sino que la frase1[palabra1] la valida con TODAS las palabras de la frase2, de forma que te dice que has errado en 64 palabras cuando eso no es cierto....

No se cuál es el enunciado del ejercicio, pero un primer acercamiento podría ser el siguiente:

1.- comprobar primero si el tamaño del las frases es el mismo
1.1.-Si es el mismo, mediante un bucle while, recorrer el array de frase1 y comparar indice a indice las palabras, de forma que las comparas con su correspondiente de la frase 2 y no con todas.
2.- En caso de que no tengan la misma longitud de la frase, recorrer el while de la frase con longitud más pequeña y al salir del bucle indicar cuantas palabras de la frase con longitud más larga se quedan sin evaluar (resta de índices --> fraseLarga.size() - fraseCorta.size().

Espero ayudarte.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Contar palabras diferentes entre dos String

Publicado por Ruben (24 intervenciones) el 19/12/2016 11:00:53
Hola Carlos,

He modificado tu clase con los comentarios anteriores, y funciona bien.
Te paso el código con las modificaciones, espero que te sea de ayuda.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public class CalcularErroresEntreDosStrings {
	int palabrasSinEvaluar = 0;
 
	public static void main(String[] args) {
		CalcularErroresEntreDosStrings programa = new CalcularErroresEntreDosStrings();
		programa.inicio();
	}
 
	public void inicio() {
		String frase1 ="Esta nina juga ala pelota en la cale." ;
		String frase2 = "Este niño juega a la pelota en la calle.";
		long errores = comprobarErrores(frase1, frase2);
		System.out.println("Has fallado en " + errores + " palabras.");
		System.out.println("La frases eran de diferente tamaño y se han dejado sin evaluar " + palabrasSinEvaluar + " palabras");
	}
 
	private long comprobarErrores(String str1, String str2) {
		String[] palabrasStr1 = str1.split(" ");
		String[] palabrasStr2 = str2.split(" ");
		int errores = 0;
		int i =0;
		if(palabrasStr1.length==palabrasStr2.length){ //Si son iguales
 
			while(i<palabrasStr1.length){
				if(palabrasStr1[i].equals(palabrasStr2[i])){
					System.out.println("La palabra --> " + palabrasStr1[i] + " es igual a --> " + palabrasStr2[i] + " con posición = " + i);
				}
				else{
					errores++;
				}
				i++;
			}
 
		}
		else{ //Son diferentes
			if(palabrasStr1.length>palabrasStr2.length){  //Frase 1 mayor que frase 2
				while(i<palabrasStr2.length){
					if(palabrasStr1[i].equals(palabrasStr2[i])){
						System.out.println("La palabra --> " + palabrasStr1[i] + " es igual a --> " + palabrasStr2[i] + " con posición = " + i);
					}
					else{
						errores++;
					}
					i++;
				}
				palabrasSinEvaluar = palabrasStr1.length - palabrasStr2.length;
			}
			else{// frase 2 mayor que frase 1
				while(i<palabrasStr1.length){
					if(palabrasStr1[i].equals(palabrasStr2[i])){
						System.out.println("La palabra --> " + palabrasStr1[i] + " es igual a --> " + palabrasStr2[i] + " con posición = " + i);
					}
					else{
						errores++;
					}
					i++;
				}
				palabrasSinEvaluar = palabrasStr2.length - palabrasStr1.length;
			}
		}
		/*for (int i = 0; i < palabrasStr1.length; i++) {
			for (int j = 0; j < palabrasStr2.length; j++) {
				if (palabrasStr1[i].equals(palabrasStr2[j])) {
					System.out.println("La palabra --> " + palabrasStr1[i] + " es igual a -->  " + palabrasStr2[j]);
				} else if (palabrasStr1[i] != palabrasStr2[j]) {
					errores++;
				}
			}
		}*/
		return errores;
	}
}


PD. la función de ComprobarErrores, le he puesto un modificador de acceso "private" por tema de encapsulación ya que solo es llamada desde esta clase y no desde otras, esto es una buena practica que en este ejercicio no es relevante pero que a la larga es bueno mantener las buenas costumbres :-)

Pruebalo y nos dices si es lo que buscabas o las especificaciones del enunciado son otras.

Un saludo :-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Contar palabras diferentes entre dos String

Publicado por Carlos (3 intervenciones) el 21/12/2016 10:22:01
Muchísimas gracias Ruben, era esto lo que lo que necesitaba.
Gracias de nuevo ^^
Salu2!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar