亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java掃描儀從文件中讀取字符頻率

Java掃描儀從文件中讀取字符頻率

陪伴而非守候 2022-12-28 10:36:59
我正在嘗試讓掃描儀在使用掃描儀時讀取文件路徑中字符的頻率。我應該添加什么來完成此方法以執行我所描述的操作。使用優先級隊列。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 回答

?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

優先級隊列相對簡單,它是一個保留順序的堆。雖然 hashmap 在這里可能會更好,但 pqueue 并不可怕。

只需遍歷文件的整個字符數組。將所有內容放入優先隊列。要獲得頻率,只需彈出 pqueue 并將其存儲在地圖或類似的東西中,或者將其輸出到任何需要輸出的地方。

Map 好多了,但是如果你必須使用優先級隊列,那就相對簡單了


查看完整回答
反對 回復 2022-12-28
?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

我建議使用簡單的映射而不是優先級隊列。使用Files.lines()和 Java Stream 你可以使用這個:


public static Map<String, Long> build(String filePath) throws IOException {

    if (filePath == null) {

        throw new NullPointerException("File doesn't exist");

    }

    try (Stream<String> lines = Files.lines(Paths.get(filePath))) {

        return lines.map(s -> s.split("")).flatMap(Arrays::stream)

                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

    }

}

如果您需要字符的順序,您可以使用 a LinkedHashMap,它保持插入順序。將我上面示例的收集器更改為:


Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting())


查看完整回答
反對 回復 2022-12-28
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

好吧,如果您不想使用 HasMap 或 PriorityQueue,這是一個替代解決方案,您可以使用一個簡單的整數頻率數組來存儲編號。所有字母的出現。我使用了大小為 128 的整數數組來涵蓋所有類型的字符,包括大寫、小寫、特殊字符或數字。(您可以在將用戶輸入存儲到 String 之后立即添加這段代碼)


    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]);

        }

    }


查看完整回答
反對 回復 2022-12-28
  • 3 回答
  • 0 關注
  • 93 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號