Bonjour à tous. Étant débutant en Java, je me permets de solliciter votre aide.
En fait mon problème est assez étrange, je ne le comprends pas vraiment. Mon but est de me construire une ArrayList contenant une liste quasi exhaustive des mots de la langue française.
Pour ça j'utilise cette URL qui contient environ 310 000 mots (c'est la plus complète que j'ai trouvée) :
https://raw.githubusercontent.com/mm...cais.frgut.txt
Ma classe Mots qui contient ma méthode de lecture d'un fichier depuis une URL et qui me ressort une ArrayList de chacune des lignes de celui-ci :
Ma classe Main qui me sert à tester mes différentes méthodes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.util.ArrayList; public class Mots { public ArrayList<String> readFile(String monUrl) throws IOException { ArrayList<String> listMots = new ArrayList<>(); URL url = new URL(monUrl); InputStream inputStream = url.openStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8"); BufferedReader buffer = new BufferedReader(inputStreamReader); while (buffer.ready()) { String mot = buffer.readLine(); listMots.add(mot); } return listMots; } }
Et là j'ai un gros problème. Ma méthode marche bien (les mots de l'URL arrivent bien dans mon ArrayList mots), mais sauf qu'elle s'arrête au bout d'un moment. Un coup je compile et mon ArrayList est de taille 416, un coup elle est de taille 29 000 et quelques, un autre coup elle est de taille 1500 ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import java.io.IOException; import java.util.ArrayList; public class AppTest { public static void main(String[] args) { String urlMots = "https://raw.githubusercontent.com/mmai/chiensuperieur/master/dictionnaires/liste.de.mots.francais.frgut.txt"; Mots m = new Mots(); ArrayList<String> mots = new ArrayList<>(); try { mots = m.readFile(urlMots); } catch (IOException e) { e.printStackTrace(); } for(String mot : mots) System.out.println(mot); System.out.println("\n" + mots.size() +" mots lus"); } }
Bref, mon ArrayList n'est jamais de la taille attendue, elle ne contient jamais mes 310 000 mots comme dans le fichier texte présenté plus haut
Est-ce que vous savez comment régler ce problème ? Et est-ce que quand vous lancez mon petit programme, votre liste se construit bien et arrive jusqu'au bout du .txt ? Car je me dis que ça vient peut être de mon garbage collector qui capte rien avec une liste aussi énorme.
Merci d'avance et bonne fin de journée.
A noter que j'ai tenté avec un objet HashSet (mieux adapté aux listes de grandes tailles) au lieu d'une ArrayList et j'ai toujours ce même problème
Partager