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

【Javafx-【直方图】文本频次统计工具|Javafx-【直方图】文本频次统计工具 中文/英文单词统计】上周倒腾了下 javafx,本来是做平时成绩系统。跟老师提了一下 javafx,他突然兴起,发了个统计中文和英文单词并以直方图显示的实验......只给两三天的期限,笑着说考验我们的潜力SOS,于是带着组里一共三人花了一天半时间做了下来。
主要界面如下
没选文本时,如果没勾选完就点开始分析会显示提示 Javafx-【直方图】文本频次统计工具|Javafx-【直方图】文本频次统计工具 中文/英文单词统计
文章图片

分析文本文档 Javafx-【直方图】文本频次统计工具|Javafx-【直方图】文本频次统计工具 中文/英文单词统计
文章图片

只有一个功能,就是选择本地 .txt 文件,选择文本语言和最低频次,然后显示直方图统计结果。
试了下大的 .txt 文档,超出界面后面的就无法显示,x轴和柱形条对不齐,还没改这个bug,目前想着是添加拉条,但感觉看起来也不方便。
Javafx-【直方图】文本频次统计工具|Javafx-【直方图】文本频次统计工具 中文/英文单词统计
文章图片

更希望能做成水平直方图,貌似 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和数据库,规范下类的设计和数据库设计,不至于代码写的:/自己都不想再看第二眼

    推荐阅读