Java lire fichier txt à table de hachage, divisé par des “:”
J'ai un fichier txt avec le formulaire:
Key:value
Key:value
Key:value
...
Je veux mettre toutes les clés avec leur valeur dans une table de hachage que j'ai créé. Comment puis-je obtenir un FileReader(file)
ou Scanner(file)
de savoir quand de diviser les clés et les valeurs à deux points (:) ? 🙂
J'ai essayé:
Scanner scanner = new scanner(file).useDelimiter(":");
HashMap<String, String> map = new Hashmap<>();
while(scanner.hasNext()){
map.put(scanner.next(), scanner.next());
}
Vous devez vous connecter pour publier un commentaire.
Lire votre fichier ligne par ligne à l'aide d'un
BufferedReader
, et pour chaque ligne d'effectuer unesplit
sur la première occurrence de:
au sein de la ligne (et si il n'y a pas de:
puis nous ignorer cette ligne).Voici un exemple de code, il évite l'utilisation du Scanner (qui a quelques subtiles comportements et à mon humble avis est en fait plus de problèmes que de sa valeur).
Le ci-dessous dans java 8.
La
.filter(s -> s.matches("^\\w+:\\w+$"))
signifie qu'il tente seulement de travailler sur la ligne dans le fichier qui sont deux chaînes séparées par des:
, évidemment fidling avec cette regex va changer ce qu'il va permettre à travers.La
.collect(Collectors.toMap(k -> k.split(":")[0], v -> v.split(":")[1]))
fonctionnera sur toutes les lignes qui correspondent au filtre précédent, fendez-les sur:
utilisez ensuite la première partie de cette répartition que la clé à une carte d'entrée, puis la deuxième partie de cette fraction de la valeur de la carte d'entrée.Files.lines(Paths.get(filePath))...
Un plus JDK 1.8 mise en œuvre.
Je suggère l'utilisation de try-with-resources et
forEach
itérateurputIfAbsent()
méthode pour éviter java.lang.IllegalStateException: valeur de clé en Double s'il y a des doublons dans le fichier.FileToHashMap.java
in.txt
La sortie est: