統計のセットとテキストファイルのプログラムにファイルと二つの関数の文字数、最初の行の異なる単語、およびその後のcharAt()関数によって、単一の文字の動作を実現するために、文字の総数を達成する会計および異なる文字の数は、順番にそれぞれの文字は数との合計の割合を出力します。単語の数を計算することは上昇動作を実現するためにソート()関数を使用して、非単語の文字かどうかを決定することによって達成されます。サイクルの数によってその出力ワード。
すべてをパッケージ化。 輸入java.io.BufferedReader; インポートのjava.io.File; 輸入java.io.FileNotFoundException。 輸入java.io.FileReader。 インポートにjava.io.IOException; 輸入はjava.util.ArrayList; 輸入java.util.Collections。 輸入はjava.util.Comparator。 輸入java.util.HashMapを; 輸入はjava.util.List; 輸入java.util.Map; インポートjava.util.Scanner; パブリッククラスのすべての{ のpublic static無効メイン(文字列[] args)はIOExceptionが//扔掉很重要スロー { ファイルファイル=新しいファイル( "f.txtを"); System.out.println( "1统计英文单词个数。" + " "+" 2统计字母个数"); スキャナSC =新しいスキャナ(System.in)。 int値= sc.nextInt()。 。1ケース:txtString2(ファイル); BREAK; ケース2:txtString(ファイル); BREAK; } } / * *統計手紙 * / パブリック静的な無効txtString(ファイルファイルが)のIOException {スロー 試して{ // IOのファイルの内容は、読み出し動作 FileReaderの新しい新FR = FileReaderの(ファイル); @SuppressWarnings( "リソース") BufferedReaderのBR =新しい新しいBufferedReaderの(FR); //クラスファイルを読み取るように構成をBufferedReaderの HashMapの<文字列、整数> HM =新しいHashMapの<>() ; // 、HashMapのは、整数値にキーとして文字列で、施行しなければならない新しいHashMapのオブジェクトを構築します。 文字列の行= NULL; 整数カウント= 0;各文字の//数 0 =整数総; //パーセンテージとして、文字の総数をカウント チャーCH; 一方、((= Br.readLineライン())!= NULL){ (INT Jため0 =; J <line.length(); J ++){ CH = line.charAt(J)、 IF((CH> = '' && CH <= 'Z')||(CH> = '' && CH < =「Z」)){//文字の文字列に文字列オブジェクトを変換します。 。+ 1合計=総; COUNT = hm.get(CH + ""); IF(COUNT == NULL){ COUNT = 1; } 他{ COUNT ++; } hm.put(CH + ""、COUNT)。 } } / * 用(文字列str:hm.keySet() ){// STR取得した鍵変数設け LV = List.get(はlist.size() - 1-I)以降.getvalue()* 1.0 /合計* 100; のSystem.out。 println(STR + "番号:" + hm.get(STR)+ " のSystem.out.println( "文字の総数:"全+); リスト<のMap.Entryの<文字列、整数リスト>>新しい新しい=のArrayList <のMap.Entryの<文字列、整数>>(hm.entrySet ()); あなたは配列をソートするオブジェクトまたはオブジェクトのコレクションにしたい場合は、// Javaで、あなたは私たちが望む目標を達成するためにコンパレータインターフェイスを実装する必要が コンパレータ<のMap.Entry <文字列、整数>>コンパレータ=新しいコンパレータ<地図。 エントリ<文字列、整数>>(){ 公共のint型の比較(のMap.Entryの<文字列、整数>左、のMap.Entryの<文字列、整数>右){ リターン(left.getValue()。のcompareTo(right.getValue() )); } }; 昇順昇順の//デフォルトセット Collections.sort(リスト、コンパレータ); ダブルLV = 0; 以下のために(INT i = 0; iは<52; I ++){//由高到低输出 LV = list.get(はlist.size() - I-1)以降.getvalue()* 1.0 /合計* 100。 System.out.println(list.get(はlist.size() - I-1).getKey()+ ":" + list.get(はlist.size() - I-1)以降.getvalue()+」 " + String.Formatの( "%2F"、LV)+ "%")。 } }キャッチ(にFileNotFoundException電子){ e.printStackTrace(); } } / * *统计单词 * / パブリック静的ボイドtxtString2(ファイルのファイル)にIOException {スロー FileReaderのFR =新規FileReader(ファイル)。 BufferedReaderのBR =新しいBufferedReaderの(FR) ; //はBufferedReaderのファイルを読み取るためにクラスを構築し たStringBuffer StringBufferの新しい新しいSB =()は、 文字列ライン= NULL; 一方((= br.readLineライン())!= NULL){ sb.append(ライン); //読み出し文字のStringBufferに付加されています } fr.close(); //流入読み取る 文字列str = sb.toString()toLowerCaseメソッドを( );. // たStringBufferと小文字に切り替え 列[]ワード= str.split( " [^(A -za-Z)] +「) ; // 非文字セグメントの言葉、取得するためにすべての単語 の新しい地図<文字列、整数> =新しいHashMapの地図<文字列、整数>(); (文字列Wordの:ワード){ //ソート リスト<のMap.Entry <文字列、整数>>リスト=新しいのArrayList <のMap.Entry <文字列 、整数>>(map.entrySet()); IF最初が記載されている場合(map.get(ワード)== NULLとして){//、次に、マップに1の発生回数を添加 map.put(単語、1); }他{ map.put(ワード、map.get(ワード)+1)。//若存在、次数累加1 } } コンパレータ<のMap.Entry <文字列、整数>>コンパレータ=新しいコンパレータ<のMap.Entry <文字列、整数>>(){ 公共のint比較(のMap.Entry <文字列、整数>左のMap.Entry <文字列、整数>右){ int型I = left.getValue() - right.getValue()。 IF(I == 0){ リターン(right.getKey()のcompareTo(left.getKey())); } 戻り(left.getValue()のcompareTo(right.getValue())); //集合默认升序 Collections.sort(リスト、コンパレータ); INT、N =はlist.size()。 System.out.println( "一共有" + N + "个单词")。 {//由高到低输出ため(iは++; iがn <I = 0 INT) ":" + I-1).getKey()+ - System.out.print(list.get(はlist.size() list.get(はlist.size() - I-1)以降.getvalue()+」「)。 } } }
スクリーンショットの結果: