上周倒腾了下 javafx,本来是做平时成绩系统。跟老师提了一下 javafx,他突然兴起,发了个统计中文和英文单词并以直方图显示的实验......只给两三天的期限,笑着说考验我们的潜力SOS,于是带着组里一共三人花了一天半时间做了下来。
主要界面如下
没选文本时,如果没勾选完就点开始分析会显示提示
分析文本文档
只有一个功能,就是选择本地 .txt 文件,选择文本语言和最低频次,然后显示直方图统计结果。
试了下大的 .txt 文档,超出界面后面的就无法显示,x轴和柱形条对不齐,还没改这个bug,目前想着是添加拉条,但感觉看起来也不方便。
更希望能做成水平直方图,貌似 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(); |
点击选择文件时,打开本地文件选择器的代码
|
|
|
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和数据库,规范下类的设计和数据库设计,不至于代码写的:/自己都不想再看第二眼