Chercher 3 éléments semblables dans une array

Résolu/Fermé
neocol Messages postés 63 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 6 février 2016 - Modifié par neocol le 28/01/2016 à 04:33
neocol Messages postés 63 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 6 février 2016 - 28 janv. 2016 à 19:19
Salut,

J'ai une list d'éléments
static List<String> myList = new ArrayList<String>();
myList.add("11112333");
myList.add("99888776");
myList.add("11522233");
myList.add("15623555");
myList.add("15623585");


Je veux chercher les éléments là où il y a trois ou plus d'éléments semblables consécutives,
par exemple
11112333 ( 4 de 1 consécutifs)
99888776 (3 de 8 consécutifs)


Après je veux supprimer ces éléments de la list myList.

Je vous montre le code que j'ai essayé d'écrire:

public class RemoveSomeElements {

static List<String> myList = new ArrayList<String>();

public static void main(String[] args) {
myList.add("11112333");
myList.add("99888776");
myList.add("11522233");
myList.add("15623555");
myList.add("15623585");

ArrayList<String> ListOfDuplicates = new ArrayList<>();
for (int i = 0; i < myList.size(); i++) {
char[] strArray = myList.get(i).toCharArray();

for (int j = 0; j < strArray.length - 2; j++) {
int count = 0;
for (int k = j + 1; k < strArray.length - 1; k++) {
if ((strArray[j] == strArray[k]) && (k != j)) {
count++;
for (int x = k + 1; x < strArray.length; x++) {
if ((strArray[k] == strArray[x]) && (x != k)) {
count++;
if (count >= 3) {
ListOfDuplicates.add(String.valueOf(strArray));
}

}
}
}
}
}

}
myList.removeAll(ListOfDuplicates);
if (myList.size() > 0) {
System.out.println(myList);
} else {
System.out.println("list empty");
}

}
}



A la fin je trouve toujours les éléments :
[99888776, 11522233, 15623585] , Pourtant il n' y a que 15623585 qui doit rester dans la list myList .

SVP, j'ai besoin de votre aide.
merci beaucoup
A voir également:

1 réponse

neocol Messages postés 63 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 6 février 2016 1
28 janv. 2016 à 19:18
Bonjour,

J'ai réussi à résoudre mon probléme.
En fait, cette question était pour éliminer quelques lignes inutiles d'un fichier.
Je vous laisse le code que j'ai écrit.


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

public class Duplicates {

static ArrayList<Integer> ints = new ArrayList<Integer>();
static List<String> myList = new ArrayList<String>();
static ArrayList<Integer> cleanedList = new ArrayList<Integer>();;

public static void main(String[] args) {
myList.add("11112333");
myList.add("99888776");
myList.add("11522233");
myList.add("15623555");
myList.add("15623589");

for (Iterator<String> it = myList.iterator(); it.hasNext();) {
String s = it.next();
ints.clear();
for (int j = 0; j < s.length(); j++) {
ints.add(Character.getNumericValue(s.charAt(j)));
}
int s1 = ints.size();
System.out.println("ints : " + ints + " size : " + ints.size());
cleanedList = removeNextToAnotherDuplicates(ints);
int s2 = ints.size();
System.out.println("cleanedList : " + cleanedList + " size : " + cleanedList.size());

if ((s1<s2) || (s1>s2)) {
System.out.println("ints changed");
it.remove();
}
}
System.out.println("myList : " + myList);

}

public static ArrayList<Integer> removeNextToAnotherDuplicates(ArrayList<Integer> list) {
for (int i = 0; i < (list.size() - 2); i++) {
boolean continueFlag = true;
for (int j = i + 1; j < (list.size() - 1) && continueFlag;) {
if (list.get(i).intValue() == list.get(j).intValue()) {
for (int x = j + 1; x < list.size() && continueFlag;) {
if (list.get(j).intValue() == list.get(x).intValue()) {
list.remove(x);
break;
} else {
continueFlag = false;
x++;
}
}

} else {
continueFlag = false;
j++;
}
}
}

return list;
}
}

1
neocol Messages postés 63 Date d'inscription mardi 4 juin 2013 Statut Membre Dernière intervention 6 février 2016 1
28 janv. 2016 à 19:19
Je n'ai pas trouvé comment marquer ma réponse comme résolu.
0