統計單詞,字母出現的次數和頻率

1、統計所給出文件中英文字母出現的頻率(區分大小寫),而且按着出現頻率倒序輸出html

思路:將文件用BufferedReader讀取java

對每行進行讀取在進行分割成單詞數組

對單詞進行循環判斷是否在A-Z,a-z之間,若在存儲到數組裏計數spa

最終進行排序code

package com.wenjian; import java.util.Scanner; import java.util.HashMap; import java.util.Iterator; import java.util.Set; import java.io.*; public class hali { public static <type> void main (String[] args) throws IOException { File file=new File("E:\\Harry Potter and the Sorcerer's Stone.txt");                  //��ȡ�ļ�
        if(!file.exists()){ System.out.println("文件打不開"); return; } Scanner scanner=new Scanner(file); BufferedReader buf = new BufferedReader(new FileReader(file)); int []num=new int[100];//計數數組
        char []zimu=new char[100];//字母表數組
        char a='A';char b='a'; for(int i=1;i<=52;i++) { if(i<=26) zimu[i]=a++; else zimu[i]=b++; } //計數
        String s=buf.readLine(); while(s!=null) { String[] lineWords=s.split(" "); for(int i=0;i<lineWords.length;i++) { for(int j=0;j<lineWords[i].length();j++) { if(lineWords[i].charAt(j)>='A'&&lineWords[i].charAt(j)<='Z') num[lineWords[i].charAt(j)-'A'+1]++; else if(lineWords[i].charAt(j)>='a'&&lineWords[i].charAt(j)<='z') num[lineWords[i].charAt(j)-'a'+1+24]++; } } s=buf.readLine(); } //求總次數
        int sum=0; for(int i=1;i<=52;i++) { sum+=num[i]; } //排序
        for(int i=1;i<=52;i++) { for(int j=i+1;j<=52;j++) { if(num[i]<num[j]) { int t=num[i]; num[i]=num[j]; num[j]=t; char p=zimu[i]; zimu[i]=zimu[j]; zimu[j]=p; } } } System.out.println(sum); for(int i=1;i<=52;i++) { double ans=num[i]*1.0/sum*100; System.out.println(zimu[i]+":"+String.format("%.2f", ans)+"%"); } } }

 

2、輸出單個文件的前N個最常出現的英文單詞orm

思路:用輸入流讀取文件htm

利用HashMap<String,Integer>來存儲單詞和計數blog

利用split進行空格分割排序

而後再輸出前n個單詞頻率高的遞歸

package com.wenjian; import java.io.File; import java.util.Scanner; import java.io.FileNotFoundException; import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class nword { public static <type> void main (String[] args) throws FileNotFoundException { File file=new File("E:\\Harry Potter and the Sorcerer's Stone.txt");                  //��ȡ�ļ�
        if(!file.exists()){ System.out.println("未找到文件"); return; } Scanner in=new Scanner(System.in); System.out.println("請輸入前n個經常使用單詞"); int n=in.nextInt(); Scanner scanner=new Scanner(file); HashMap<String,Integer> hashMap=new HashMap<String,Integer>(); while(scanner.hasNextLine()) { String line=scanner.nextLine(); String[] lineWords=line.split(" "); Set<String> wordSet=hashMap.keySet(); for(int i=0;i<lineWords.length;i++) { if(wordSet.contains(lineWords[i])) {//判斷set集合裏是否有該單詞
                    Integer number=hashMap.get(lineWords[i]);//如有次數+1
                    number++; hashMap.put(lineWords[i], number); } else {//沒有就將其放入set裏,次數爲1
                    hashMap.put(lineWords[i], 1); } } } //計算整體單詞數
        int sum=0; Iterator<String> it=hashMap.keySet().iterator(); while(it.hasNext()){ sum+=hashMap.get(it.next()); } //輸出前n個單詞
        while(n>0) { Iterator<String> iterator=hashMap.keySet().iterator(); int max=0; String maxword=null; while(iterator.hasNext()){ String word=iterator.next(); if(hashMap.get(word)>max) { max=hashMap.get(word); maxword=word; } } hashMap.remove(maxword); double ans=max*1.0/sum*100; if(!maxword.equals("")) { System.out.println(maxword+":"+max); n--; } } } }

 

 三:指定文件目錄,可是會遞歸目錄下的全部子目錄,每一個文件執行統計單詞的數量以及百分比

思路:首先獲取目錄路徑

對目錄下的目錄進行判斷,若是仍是目錄繼續遞歸,不然就輸出該文檔裏的單詞

package com.wenjian; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.util.Scanner; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Reader; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class neng2 { //輸出文檔單詞
    static public void print(String f) throws IOException { File file=new File(f); if(!file.exists()){ System.out.println("沒法打開文件"); return; } BufferedReader buf = new BufferedReader(new FileReader(file)); HashMap<String,Integer> hashMap=new HashMap<String,Integer>(); String s; while((s=buf.readLine())!=null) { String[] lineWords=s.split(" "); Set<String> wordSet=hashMap.keySet(); for(int i=0;i<lineWords.length;i++) { if(wordSet.contains(lineWords[i])) { Integer number=hashMap.get(lineWords[i]); number++; hashMap.put(lineWords[i], number); } else { hashMap.put(lineWords[i], 1); } } } while(hashMap.size()>0) { Iterator<String> iterator=hashMap.keySet().iterator(); int max=0; String maxword=null; while(iterator.hasNext()){ String word=iterator.next(); if(hashMap.get(word)>max) { max=hashMap.get(word); maxword=word; } else if(hashMap.get(word)==max) { if(word.compareTo(maxword)<0) { maxword=word; } } } hashMap.remove(maxword); if(!maxword.equals("")) System.out.println(maxword+":"+max+" "); } } //遞歸文件
    static public void getDirectory(File file) throws IOException { File flist[] = file.listFiles(); if (flist == null || flist.length == 0) { return; } for (File f : flist) { if (f.isDirectory()) { getDirectory(f); } else { System.out.println("file==>" + f.getAbsolutePath()); print( f.getAbsolutePath()); System.out.println(); } } } static Scanner sc=new Scanner(System.in); public static void main(String[] args)throws IOException { String path="D:\\test"; File fm=new File(path); getDirectory(fm); } } 

 

原文出處:https://www.cnblogs.com/xiaofengzai/p/11801935.html

相關文章
相關標籤/搜索