Java利用Map實現計算文本中字符個數

一、題目要求

有一個英文的文本文檔a.txt , 需要讀取該文本文檔並計算文檔中英文字符出現的次數,最後打印輸出

註意:map集合隻能放入英文字符,不能夠有空格數字引號等字符,所以在寫代碼的時候需要額外的進行判斷,還需要考慮的一點是英文字符是有大小寫的,但是統計在map裡面就不區分大小寫

二、分析

1、需要先獲取文檔的路徑,並創建HashMap作為存放次數的容器,key的類型為Character存放字符,value的類型為Integer存放次數

2、通過文檔輸入流讀取文檔中的內容,得到一串字符串

3、遍歷字符串,獲得字符串中每一個字符

4、判斷字符在map集合中是否存在

5、不存在則將其放入

6、存在則將map集合中字符key對應的次數value取出,然後加一,再通過put方法重新放回,起到更新次數的效果

三、部分代碼展示

1、創建Map列表及文件路徑

FileInputStream fis = null;
HashMap<Character, Integer> map = new HashMap<>();

2、獲得文本中的內容並返回為字符串

while ((len = fis.read(b))!=-1){
// 獲得文件中的字符串
      s = new String(b, 0, len);
}

3、遍歷字符串並獲得每個字符再進行相關判斷後放入map集合中

// 遍歷字符串得到每一個字符
 for (int i = 0; i < s.length() ; i++) {
     char c = s.charAt(i);
     // 判斷是否是字母
     if ( ((c>='a')&&(c<='z')) || ((c>='A')&&(c<='Z'))){
     // 將字母轉換為小寫
     char nc = Character.toLowerCase(c);
    // 判斷map集合中是否有該鍵
     if (map.containsKey(nc)){
     Integer num = map.get(nc);
     num++;
     map.put(nc,num);
  }else {
     map.put(nc,1);
    }
  }

  }

4、遍歷map集合得到數據

// 遍歷map集合得到數據
Set<Character> key = map.keySet();
  for (Character c : key) {
  Integer value = map.get(c);
  System.out.println("key="+c+"----"+"value="+value);
}

四、全部代碼

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class totalNum {
    public static void main(String[] args) throws IOException {
        // todo 統計字母出現的次數
        FileInputStream fis = null;
        String s = null;
        HashMap<Character, Integer> map = new HashMap<>();
        try {
            fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-25\\src\\a1\\a.txt");
            byte[] b = new byte[1024];
            int len = 0;

            while ((len = fis.read(b))!=-1){
                // 獲得文件中的字符串
                 s = new String(b, 0, len);
            }

            // 遍歷字符串得到每一個字符
            for (int i = 0; i < s.length() ; i++) {
                char c = s.charAt(i);
                // 判斷是否是字母
                if ( ((c>='a')&&(c<='z')) || ((c>='A')&&(c<='Z'))){
                    // 將字母轉換為小寫
                    char nc = Character.toLowerCase(c);
                    // 判斷map集合中是否有該鍵
                    if (map.containsKey(nc)){
                        Integer num = map.get(nc);
                        num++;
                        map.put(nc,num);
                    }else {
                        map.put(nc,1);
                    }
                }

            }

            // 遍歷map集合得到數據
            Set<Character> key = map.keySet();
            for (Character c : key) {
                Integer value = map.get(c);
                System.out.println("key="+c+"----"+"value="+value);
            }



        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            fis.close();
        }
    }
}

五、結果截圖(部分)

六、a.txt文本

I am happy to join with you. today in what will go down in history ,as the greatest demonstration for freedom in the history of our nation…
Five score years ago, a great American, in whose symbolic shadow we stand today, signed the Emancipation Proclamation. This momentous decree came as a great beacon light of hope to millions of Negro slaves who had been seared in the flames of withering injustice. It came as a joyous daybreak to end the long night of bad captivity.

到此這篇關於Java利用Map實現計算文本中字符個數的文章就介紹到這瞭,更多相關Java計算文本字符個數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: