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


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

思路:將文件用BufferedReader讀取

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

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

最終進行排序

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)+"%");
        }
}
}

 

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

思路:用輸入流讀取文件

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

利用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);
            
        }
}
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM