Estoy tratando de resolver un problema de encontrar palabras que faltan en una cadena.
Por ejemplo:
Entrada
String 1 = "I love programming, pizza, coke and chips";
String 2 = "I programming, chips";
Salida Obligatorio
Missing words = "love pizza coke";
Nota : el orden de salida tiene que ser mismo (aquí es donde estoy arruinando)
lo que tengo hasta ahora, pero estoy consiguiendo resultados erróneos.
public static List<String> findWord(String s, String t) {
HashSet<String> missingWords = new HashSet<>();
String[] words = s.split(" ");
for(int i=0; i < words.length; i++) {
if (!t.contains(words[i])) {
missingWords.add(words[i]);
}
}
List<String> ans = new ArrayList<String>();
for (String str: missingWords) {
ans.add(str);
}
return ans;
}
Me gustaría acercarse a esta división por dos cadenas de entrada, despojarse de puntuacion, y luego caminando por cada matriz de palabras, en el orden original. Cuando se enfrentan a un partido, ambas listas antelación. Cuando no hay ninguna coincidencia, los avances lista original, pero la segunda lista no es así, y también grabar la palabra original como no haber encontrado una coincidencia.
El punto clave aquí es que utilizamos una ArrayList
, que mantiene el orden de inserción, al atravesar.
String input = "I love programming, pizza, coke and chips";
String other = "I programming, chips";
String[] parts = input.replaceAll("[,.;-]", "").split("\\s");
String[] otherparts = other.replaceAll("[,.;-]", "").split("\\s");
List<String> missing = new ArrayList<>();
int pnt = 0;
for (int i=0; i < parts.length; ++i) {
if (parts[i].equals(otherparts[pnt])) {
++pnt;
}
else {
missing.add(parts[i]);
}
}
System.out.println(Arrays.toString(parts));
System.out.println(Arrays.toString(missing.toArray()));
[I, love, programming, pizza, coke, and, chips]
[love, pizza, coke, and]
Manifestación
agregado de demostración sólo para fines informativos. No confiar en ella para su uso en producción.