Chercher 3 éléments semblables dans une array

Résolu
neocol Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   -  
neocol Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   -
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

1 réponse

  1. neocol Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   1
     
    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
    1. neocol Messages postés 63 Date d'inscription   Statut Membre Dernière intervention   1
       
      Je n'ai pas trouvé comment marquer ma réponse comme résolu.
      0