J'essaie d'obtenir un scanner pour lire la fréquence des caractères dans le fichier FilePath tout en utilisant un scanner. Que dois-je ajouter pour compléter cette méthode pour faire ce que j'ai décrit. Utilisation d'une file d'attente prioritaire.
public static Huffman build(String filePath) throws IOException { if (filePath == null) { throw new NullPointerException("File doesn't exist"); } else { try { Scanner file = new Scanner(new File(filePath)); } catch (FileNotFoundException e) { e.printStackTrace(); } while (file.hasNextLine()) { Scanner s2 = new Scanner(file.nextLine()); while (s2.hasNext()) { String s = s2.next(); System.out.println(s); } } } }
3 Réponses :
Une file d'attente prioritaire est relativement simple, c'est un tas qui préserve la commande. Alors qu'un haschmap serait probablement mieux ici, Pueur n'est pas horrible. P>
passer simplement sur l'ensemble du tableau de caractères du fichier. Tout mettre dans la file d'attente prioritaire. Pour obtenir la fréquence, faites-le sauter la paquée et la stocker sur une carte ou quelque chose de similaire, ou de la sortir à l'endroit où vous avez besoin de le sortir. P>
carte est beaucoup mieux, mais si vous devez utiliser une file d'attente prioritaire, elle est relativement simple p>
Je recommanderais d'utiliser une carte simple au lieu d'une file d'attente prioritaire. Utilisation de Files.Lines () CODE> et Java Flux Vous pouvez utiliser ceci:
Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting())
Eh bien, il s'agit d'une solution alternative si vous ne voulez pas utiliser HASMAP ou priorityQueue, vous pouvez utiliser un simple réseau de fréquences d'entier pour stocker le NON. d'occurrence de toutes les lettres. J'ai utilisé un tableau entier de taille 128 pour couvrir tous les types de caractères, y compris majuscules, minuscules, caractères spéciaux ou chiffres. (Vous pouvez ajouter ce morceau de code juste après avoir stocké l'entrée de l'utilisateur sur String S)
int[] count = new int[128]; // initially they all will be zero for(char ch:s.toCharArray()){ count[ch]++; } for(int i=0;i<128;i++){ if(count[i]!=0){ System.out.println((char)i+":"+count[i]); } }