Javafx-【直方图】文本频次统计工具 中文/英文单词统计

上周倒腾了下 javafx,本来是做平时成绩系统。跟老师提了一下 javafx,他突然兴起,发了个统计中文和英文单词并以直方图显示的实验......只给两三天的期限,笑着说考验我们的潜力SOS,于是带着组里一共三人花了一天半时间做了下来。

主要界面如下

没选文本时,如果没勾选完就点开始分析会显示提示

Javafx-【直方图】文本频次统计工具 中文/英文单词统计_第1张图片

分析文本文档

Javafx-【直方图】文本频次统计工具 中文/英文单词统计_第2张图片

只有一个功能,就是选择本地 .txt 文件,选择文本语言和最低频次,然后显示直方图统计结果。
试了下大的 .txt 文档,超出界面后面的就无法显示,x轴和柱形条对不齐,还没改这个bug,目前想着是添加拉条,但感觉看起来也不方便。
Javafx-【直方图】文本频次统计工具 中文/英文单词统计_第3张图片
更希望能做成水平直方图,貌似 javafx 封装的 BarChart 把 x 轴和 y 轴能放的数据类型固定了。在 Youtube 看到有自己封装BarChart,很不错!(plus 上面好多javafx UI 界面也很绝!
因为时间很紧急,然后也是初学,代码惨不忍睹,Java 功底不扎实,Javafx 控件使用也一知半解。放些主要功能的实现代码
筛选出中英文都用的正则表达式!!! 只是对英文那个 's 会有问题,因为 ' 那也分割了,暂时不知道怎么改,下面是代码

public static void Analysis(String flag) throws IOException
    {
        int bufferSize = 20 * 1024 * 1024;
        File file = new File(AnalysisFile);
        FileInputStream fileInputStream = new FileInputStream(file);
        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
        InputStreamReader inputStreamReader = new InputStreamReader(bufferedInputStream);
        BufferedReader input = new BufferedReader(inputStreamReader, bufferSize);
        String line;
        while((line = input.readLine()) != null) {
            if(flag == "英文") { // Combox 那选择中英文带过来的参数 flag
                String[] str = line.split("\\W"); // 使用正则表达式以非字母,数字,下划线的符号分割
                for(String e : str) {
                    if(e.matches("[a-z]+")) { // 筛选出英文单词
                        if(sumOfWords.containsKey(e)) {
                            int num = sumOfWords.get(e);
                            sumOfWords.put(e, num + 1);
                        }
                        else sumOfWords.put(e, 1);
                    }
                }
            }
            else if(flag == "中文") {
                String d;
                char[] charArray = line.toCharArray(); //将字符串转换为字符数组
                for(int x = 0;x < charArray.length;x++) { //循环遍历字符数组
                    d=Character.toString(charArray[x]); //返回一个字符串对象
                    if (d.matches("[\\u4e00-\\u9fa5]")) {//判断是否为汉字
                        if(!sumOfChinese.containsKey(charArray[x])) {
                            sumOfChinese.put(charArray[x], 1);
                        } else {
                            sumOfChinese.put(charArray[x],sumOfChinese.get(charArray[x])+1);
                        }
                    }
                }
            }
        }
        input.close();

点击选择文件时,打开本地文件选择器的代码

    @FXML
    void choosefile(ActionEvent event) {
        Stage primaryStage = new Stage();
        FileChooser fileChooser = new FileChooser();
        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
        fileChooser.getExtensionFilters().add(extFilter);
        File file = fileChooser.showOpenDialog(primaryStage);
        if(file != null) {
            FileInputField.setText(file.getAbsolutePath());
            AnalysisFile = String.valueOf(file);
            TipLabel.setText("");
        }
    }

最后提交前本来想打包成 .exe 文件,控制台用jdk里packager打包出现乱码,解决过程中想到,这是个仍有bug并且没什么作用的工具,随即放弃打包。之后有时间重新写一下,修正 bug 后加些功能就会上传到 github,组里取名Useless Tool,所以只能说供初学者参考了
12月份还得交学生平时成绩管理系统那个项目,比较麻烦,三种参与者,十个活动。设计数据库都想了好久(数据库还没看到设计那章,只能自己瞎设计。这个项目做下来也会上传!在这之前还需要多看看java和数据库,规范下类的设计和数据库设计,不至于代码写的:/自己都不想再看第二眼

你可能感兴趣的:(Javafx-【直方图】文本频次统计工具 中文/英文单词统计)