zoukankan      html  css  js  c++  java
  • 统计文章中得单词百分比、以及字母百分比

      今天做的课堂测试是将一篇英文文章中的单词、字母得个数以及百分比所输出出来。

      对此我的想法是:统计字母则比较简单。

    1、用bufferreader实现读取文本文件。

    2、对读取到的一行文件进行转存到字符数组中去。

    3、在经过判断进行相关的加和。

    //统计文章中的字母次数
    package Word;
    
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.text.DecimalFormat;
    
    public class WordFind {
    
        public static void main(String[] args) {
            WordFind2[] word=new WordFind2[100];
            for(int i=0;i<100;i++) {
                word[i]=new WordFind2();
            }
            word[0].input(word);
            word[0].showAsc(word);
        }
    
    }
    
    class WordFind2{
        private char word;
        private int num;
        private static double time=0;
        public WordFind2() {
            word='0';
            num=1;
        }
        public static double getTime() {
            return time;
        }
        public char getWord() {
            return word;
        }
        public void setWord(char word) {
            this.word = word;
        }
        public int getNum() {
            return num;
        }
        public void setNum(int num) {
            this.num = num;
        }
        public void addnum() {
            num++;
        }
        public void input(WordFind2[] word) {
            String str;
            try {
                BufferedReader in=new BufferedReader(new FileReader("word.txt"));
                while((str = in.readLine())!=null) {
                    change(str,word);
                }
                in.close();
            }
            catch (IOException e) {
                System.out.println("缓冲区错误");
        }
        }
        private void change(String str, WordFind2[] word2) {
            char[] s1=str.toCharArray();
            for(int i=0,j=0;i<s1.length;i++) {
                if((s1[i]>=65&&s1[i]<=90)||(s1[i]>=97&&s1[i]<=122)) {
                    add(s1[i],word2);
                    time++;
                }
            }
            
        }
        private void add(char s, WordFind2[] word2) {
            int j=0;
            boolean f=false;
            for(int i=0;i<word2.length;i++) {
                if(word2[i].getWord()=='0') {f=true;j=i;break;}
                if(s==word2[i].getWord()) {word2[i].addnum();break;}
            }
            if(f==true) {
                word2[j]=new WordFind2();
                word2[j].setWord(s);
            }
        }
        void show(WordFind2[] word2) {
            DecimalFormat df = new DecimalFormat( "0.0000");
            double b=0;
            for(int i=0;word2[i].getWord()!='0';i++) {
                b=word2[i].getNum()/word2[i].getTime();
                System.out.println(word2[i].getWord()+"	"+df.format(b));
            }
        }
        void showAsc(WordFind2[] word2) {
            WordFind2 word=new WordFind2();
            for(int i=0;word2[i].getWord()!='0';i++) {
                //if(word2[i].getWord().equals("")) continue;
                for(int j=i+1;word2[j].getWord()!='0';j++) {
                        if(word2[i].getNum()<word2[j].getNum()) {
                            word.setWord(word2[i].getWord());
                            word.setNum(word2[i].getNum());
                            word2[i].setWord(word2[j].getWord());
                            word2[i].setNum(word2[j].getNum());
                            word2[j].setWord(word.getWord());
                            word2[j].setNum(word.getNum());
                        }
                    
                }
            }
            for(int i=0;word2[i].getWord()!='0';i++) {
                //if(word2[i].getWord().equals(""))continue;
                System.out.println(word2[i].getWord()+"	"+word2[i].getNum());//
            }
        }
    
    }

    字母的相对要简单一些,而单词得我得想法是:

    1、也是先将文本以行为基础进行读取。

    2、在在一行的基础上,进行空格的以及标点符号得判断,之后进行单词的读取。

    3、进行单词的查重以及加和。

    //统计文章中的单词中的次数
    package Word;
    
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.text.DecimalFormat;
    
    public class Code {
    
        public static void main(String[] args) {
        
            String[] del_word=new String[99999];
            WordFind3[] word=new WordFind3[999999];
            for(int i=0;i<word.length;i++) {
                word[i]=new WordFind3();
            }
            word[0].input(del_word);
            word[0].input(word);
            word[0].showAsc(word);
        }
    
    }
    
    class WordFind3{
        private String word;
        private double num;
        private static double time=0;
        public WordFind3() {
            word=null;
            num=1;
        }
        public static double getTime() {
            return time;
        }
        public static void setTime(double time) {
            WordFind3.time = time;
        }
        public String getWord() {
            return word;
        }
        public void setWord(String word) {
            this.word = word;
        }
        public double getNum() {
            return num;
        }
        public void setNum(double num) {
            this.num = num;
        }
        public void addnum() {
            num++;
        }
        public void input(WordFind3[] word) {
            String str;
            try {
                BufferedReader in=new BufferedReader(new FileReader("word.txt"));
                while((str = in.readLine())!=null) {
                    change(str,word);
                }
                in.close();
            }
            catch (IOException e) {
                System.out.println("缓冲区错误");
        }
        }
        public void input(String [] del_word) {
            String str;
            try {
                BufferedReader in=new BufferedReader(new FileReader("word.txt"));
                while((str = in.readLine())!=null) {
                   
                }
                in.close();
            }
            catch (IOException e) {
                System.out.println("缓冲区错误");
        }
        }
        private void change(String str, WordFind3[] word2) {
            char[] s1=str.toCharArray();
            String str1=null;
            int star=0,end=0;
            boolean f=false;
            for(int i=0;i<s1.length;i++) {
                if((s1[i]>90&&s1[i]<97)||s1[i]<65||s1[i]>122) {
                    if(star==0&&end==0) {
                        star=i;
                        continue;
                    }
                    else {
                        end=i;
                    }
                    if(star==0)continue;
                    //System.out.println(star+" "+end);
                    str1=str.substring(star+1,end);
                    time++;
                    add(str1,word2);
                    star=end;
                }
            }
        }
        private void add(String s, WordFind3[] word2) {
            int j=0;
            boolean f=false;
            for(int i=0;i<word2.length;i++) {
                if(word2[i].getWord()==null) {f=true;j=i;break;}
                if(word2[i].getWord().equals(s)) {word2[i].addnum();break;}
            }
            if(f==true) {
                word2[j]=new WordFind3();
                word2[j].setWord(s);
                word2[j].setNum(1);
            }
        }
        void show(WordFind3[] word2) {
            DecimalFormat df = new DecimalFormat( "0.0000");
            double b=0;
            for(int i=0;word2[i].getWord()!=null;i++) {
                if(word2[i].getWord().equals("")) {
                    word2[i].setTime(word2[i].getTime()-word2[i].getNum());
                }
            }
            for(int i=0;word2[i].getWord()!=null;i++) {
                if(word2[i].getWord().equals(""))continue;
                b=word2[i].getNum()/word2[i].getTime();            //百分数字输出
                System.out.println(word2[i].getWord()+"	"+word2[i].getNum());//
            }
        }
        public void showAsc(WordFind3[] word2) {
            WordFind3 word=new WordFind3();
            for(int i=0;word2[i].getWord()!=null;i++) {
                //if(word2[i].getWord().equals("")) continue;
                for(int j=i+1;word2[j].getWord()!=null;j++) {
                        if(word2[i].getNum()<word2[j].getNum()) {
                            word.setWord(word2[i].getWord());
                            word.setNum(word2[i].getNum());
                            word2[i].setWord(word2[j].getWord());
                            word2[i].setNum(word2[j].getNum());
                            word2[j].setWord(word.getWord());
                            word2[j].setNum(word.getNum());
                        }
                    
                }
            }
            for(int i=0;word2[i].getWord()!=null;i++) {
                if(word2[i].getWord().equals(""))continue;
                System.out.println(word2[i].getWord()+"	"+word2[i].getNum());//
            }
        }
        public void showAsc(WordFind3[] word2, int n2) {
            WordFind3 word=new WordFind3();
            for(int i=0;word2[i].getWord()!=null;i++) {
                //if(word2[i].getWord().equals("")) continue;
                for(int j=i+1;word2[j].getWord()!=null;j++) {
                        if(word2[i].getNum()<word2[j].getNum()) {
                            word.setWord(word2[i].getWord());
                            word.setNum(word2[i].getNum());
                            word2[i].setWord(word2[j].getWord());
                            word2[i].setNum(word2[j].getNum());
                            word2[j].setWord(word.getWord());
                            word2[j].setNum(word.getNum());
                        }
                    
                }
            }
            for(int i=0;word2[i].getWord()!=null&&i<n2;i++) {
                if(word2[i].getWord().equals("")) {continue;}
                System.out.println(word2[i].getWord()+"	"+word2[i].getNum());//
            }
            
        }
    }

    但是我的程序还是有着一些的缺陷,就是排序的方法采用的冒泡排序,空间复杂度、时间复杂度都相对较高,我想在之后实现将数据存储到李斯特容器中,在用容器进行相关的排序操作。

  • 相关阅读:
    GridView多表头固定+分组+总计
    ajaxpro.2.dll使用【转帖】
    表达式计算易错题
    uclibc下使用libcurl的段错误(缺少hosts文件)
    《java.util.concurrent 包源码阅读》01 源码包的结构
    Linux学习笔记【2】Install Software under RedHat enterprise 5.4
    Windows语言包的那些事
    Let outlook work background when it is minimal
    DB2 Error Message
    db2 系统表信息
  • 原文地址:https://www.cnblogs.com/huan-ch/p/11064928.html
Copyright © 2011-2022 走看看