1. 程式人生 > >統計英語文章中單詞

統計英語文章中單詞

ring arr time null break clas write hang new

這個程序目的在於要將文本中的單詞進行錄入,同事其中的標點符號要進行舍去,在開始的時候我用Scanner了進行輸入,對每個字符串進行錄入,先不考慮標點符號的問題,在進行將標點符號的舍去的時候遇到了一些問題,開始我想通過轉換為字符數組來進行割舍,遇到了很多問題:數組長度不確定的問題,又通過上網查閱資料知道了java的數組不和c、c++一樣有\0終止字符,java沒有\0這樣的終止字符。所以在最後我想起了java中可以截取子字符串,通過對標點符號位置的記錄,再用substing來提取子字符串再來儲存到類數組中進行比較,記錄。

下面是原代碼:

import java.io.IOException;
import java.io.PrintWriter; import java.nio.file.Paths; import java.util.Scanner; public class Scend10_11 { public static void main(String[] args) throws IOException { FindWord [] word; word=new FindWord [100]; word[0]=new FindWord(); word[0].input(word); word[
0].show(word); word[0].outfile(word); } } class FindWord{ private String word; //單詞 private int num; //單詞次數 FindWord(){ word=null; num=1; } public String getWord() { return word; } public void setWord(String word) {
this.word = word; } public int getNum() { return num; } public void setNum(int num) { this.num = num; } void addnum() { num++; } void outfile(FindWord word[])throws IOException{ //將結果輸出到文件中 PrintWriter out =new PrintWriter ("WordTimes.txt"); int i=0; for(i=1;i<100;i++) { if(word[i]!=null) { out.println(word[i].getWord()+"\t"+word[i].getNum()); } } out.flush(); out.close(); } void input(FindWord word[]) throws IOException{ //將文件錄入並進行標點符號舍去 Scanner in = new Scanner(Paths.get("word.txt")); String k; while(in.hasNextLine()) { String s=in.next(); compare(s,word); //標點符號的舍去以及對單詞額比較和錄入方法的電泳 } } private void compare(String str1,FindWord word[]) { int j=0; boolean f=false; char s1[]=str1.toCharArray(); for(int i=0;i<str1.length();i++) { if((s1[i]>=65&&s1[i]<=90)||(s1[i]>=97&&s1[i]<=122)); else {j=i;f=true;} } if(f==true) { if(j==str1.length()-1)change(str1.substring(0,j),word); else{change(str1.substring(0, j),word); change(str1.substring(j+1, str1.length()),word); } } else change(str1,word); //調用change } private void change(String s, FindWord word[]) { //比較單詞相同以及儲存 int j; boolean bo=false; for(j=0;word[j]!=null;j++) { if(word[j].getWord()!=null&&s.compareTo(word[j].getWord())==0) { word[j].addnum(); bo=true; break; } bo=false; } if(bo==false) { word[j]=new FindWord(); word[j].setWord(s); word[j].setNum(1); } } public void show(FindWord[] word2) { //輸出結果 int i=0; for(i=1;i<100;i++) { if(word2[i]!=null) { System.out.println(word2[i].getWord()+"\t"+word2[i].getNum()); } } } }

這個程序我並沒有將最後的結果進行排序操作,這項操作以後將會修改這個程序。

統計英語文章中單詞