上週倒騰了下 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();
點選選擇檔案時,開啟本地檔案選擇器的程式碼
@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和資料庫,規範下類的設計和資料庫設計,不至於程式碼寫的:/自己都不想再看第二眼