Tengo un bucle, que itera a través de una lista de mapas y ahora quiere comprobar cada entrada de la lista de mapas si contiene una determinada cadena más de una vez y luego eliminar todas las cadenas excepto el primero que se produce pero no tengo ni idea de cómo hacerlo .
for (Map<String, String> entry : mapList) {
String line = "";
for (String key : entry.keySet()) {
if (StringUtils.containsAny(key, "5799"){
line += entry.get(key) + "|";
}
list1.add(line);
}
}
Estoy agradecido por cada idea.
Para ver si key
contiene una cadena de s
al menos dos veces, y para eliminar la segunda aparición, utilice indexOf
dos veces, con la segunda llamada de iniciar la búsqueda después de la primera aparición:
static String removeSecond(String key, String s) {
int idxFirst = key.indexOf(s);
if (idxFirst != -1) {
int idxSecond = key.indexOf(s, idxFirst + s.length());
if (idxSecond != -1) {
return key.substring(0, idxSecond) +
key.substring(idxSecond + s.length());
}
}
return key; // Nothing to remove
}
Prueba
System.out.println(removeSecond("mississippi", "ss")); // prints: missiippi
System.out.println(removeSecond("mississippi", "i")); // prints: missssippi
System.out.println(removeSecond("mississippi", "pp")); // prints: mississippi
ACTUALIZAR
Si desea eliminar todos los duplicados, es decir, dejar únicamente la primera vez que aparece, seguir buscando. Para un mejor rendimiento de la construcción de la nueva cadena, utilice StringBuilder
.
static String removeDuplicates(String key, String s) {
int idx = key.indexOf(s);
if (idx == -1)
return key; // Nothing to remove
StringBuilder buf = new StringBuilder();
int prev = 0;
for (int start = idx + s.length(); (idx = key.indexOf(s, start)) != -1; prev = start = idx + s.length())
buf.append(key.substring(prev, idx));
return (prev == 0 ? key : buf.append(key.substring(prev)).toString());
}
Prueba
System.out.println(removeDuplicates("mississippi", "ss")); // prints: missiippi
System.out.println(removeDuplicates("mississippi", "i")); // prints: misssspp
System.out.println(removeDuplicates("mississippi", "s")); // prints: misiippi
System.out.println(removeDuplicates("mississippi", "ab")); // prints: mississippi