標籤:style class blog code java http
此小程式使用最基本的方法來統計文本中英文單詞的個數,想法也比較簡單:(1)從文本中文本讀取內容,使用BufferedReader類每次讀取一行並添加到StringBuffer類型變數中, 最後StringBuffer類型變數即為文本的內容,如StringBuffer sb;(2)把sb的內容全部轉化成小寫字母(或大寫字母);(3)統計檔案中各種標點符號個數;(4)把所有標點符號統一替換成一種標點符號,如替換成逗號(5)替換後的文本使用字串的分割函數來擷取返回的字串數組的長度,此長度即為檔案中單詞的總個數
代碼如下;
import java.io.*;public class WordsCount { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new FileReader("e:/a.txt")); StringBuffer sb = new StringBuffer(); String line; while((line = br.readLine()) != null) { sb.append(line);//把每次讀取的一行資料附加到sb中 sb.append("\n");//每讀取一行加入分行符號 } System.out.print("原檔案內容:\n"+sb);//列印目前的文章即字串sb的內容 br.close();//關閉檔案流 String s = sb.toString().toLowerCase();//把sb轉化成小寫複製給字串s System.out.print("字母轉化成小寫後檔案內容:\n"+s);//列印當前文章即字串s的內容 int countCh = 0;//統計檔案中字元個數 StringBuffer c = new StringBuffer();//隱藏檔中字元個數 for(int i=0;i<s.length();i++) { char ch = s.charAt(i);//擷取檔案中每一個字元並賦給字元ch if(!(ch >= ‘a‘ && ch <= ‘z‘)) { c.append(ch);//把擷取的字元一次附加到c中 countCh ++; } } int space = 0,qm = 0,comma = 0,excl = 0,other = 0;//question mark問號 comma 逗號 exclamation 歎號 for(int i=0;i<c.length();i++) if(c.charAt(i) == ‘ ‘) space ++; else if(c.charAt(i) == ‘?‘) qm ++; else if((c.charAt(i) == ‘!‘)) excl ++; else if((c.charAt(i) == ‘,‘)) comma ++; else other ++; String temp = ""; if(countCh>=0) { /* (1)把所有標點符號替換成逗號之後的檔案內容賦給臨時字串temp,假設本檔案只有,? !等幾種標點. (2)替換情況可以實際情況出現的標點而改變,注意最後兩個個替換!!一是考慮到派生詞如warm-hearted為一個詞的情況 可以把-替換成26個小寫字母中的任意一個,從而保證派生詞記為一個單詞;二就是縮寫詞,應該把‘替換成為分隔字元, 替換時注意使用逸出字元的使用,從而保證縮寫詞記為一個單詞 */ temp = s.trim().replace(‘ ‘, ‘,‘).replace(‘.‘,‘,‘).replace(‘!‘,‘,‘).replace(‘?‘,‘,‘) .replace(‘(‘,‘,‘).replace(‘)‘,‘,‘).replace(‘-‘,‘a‘).replace(‘\‘‘,‘,‘); System.out.println("\n替換成逗號之後的檔案內容:\n"+temp+"\n"); String[] data = temp.split(","); System.out.println("空格總個數: "+space+" 問號總個數:"+qm +" 歎號總個數: "+excl+" 逗號總個數:"+comma+" 其他標點個數: "+other);//列印出空格總個數 System.out.println("\n單詞的總個數為:"+data.length); } } }
運行結果: