0

みなさん、こんにちは。これを機能させるのに問題があります。基本的に私がやりたかったのは、この種のデータを含むテキストファイルを正確にではなく、まったく同じように読み取って、各行に表示される各文字の頻度を数えることです。また、実際のデータには0〜255のランダムASCIIが含まれています。

例は次のとおりです。

こんにちは、ジョンです。
.4%2)&、。!m @ ll

私が欲しかったのは、マップのリストに実装されたこのようなものです

{H = 3、i = 3、'' = 3、t = 1、h = 2、s = 2、...行末まで}、
{W = 1、e = 2、'' = 4 、a = 1、r = 1、g = 2、o = 1、i = 1、n = 1、。= 2、4 = 1、%= 1 ....行末まで}、

だからその地図のリスト

私は同様の質問について調査しようとしましたが、コーディングで最も近いのはこれです。

List <Map<String, Integer>> storeListsofMaps = new ArrayList<Map<String, Integer>>();
ArrayList <String> storePerLine = new ArrayList<String>();
String getBuf;

try {
FileReader rf = new FileReader("simpleTextCharDist.txt");
BufferedReader encapRF = new BufferedReader(rf);

getBuf = encapRF.readLine();

while (getBuf!=null){
storePerLine.add(getBuf);

getBuf = encapRF.readLine();
}

for (String index: storePerLine){
Map<String, Integer> storeCharAndCount = new HashMap<String, Integer>();

Integer count = storeCharAndCount.get(index);
storeCharAndCount.put(index, (count==null)?count = 1:count+1);

storeListsofMaps.add(storeCharAndCount);
}

System.out.println("StoreListsofMaps: "+ storeListsofMaps);

encapRF.close();
}

私はこのコードが私が説明したものを実行しないことを知っていますが、この部分まで立ち往生しています。私が示したコードは、文字列内の各文字ではなく、単語自体のみをカウントします。文字列をchar[]に変換し、再度文字列に変換して、文字列内の各要素の反復をカウントしようとしましたが、非常に非効率的で、多くのエラーが発生します。誰かが助けてくれるほど親切にしてくれることを願っています。

4

2 に答える 2

1

これを達成するための疑似アルゴリズムは次のとおりです-

  1. ファイルI/Oを使用して、リストの1つの要素として1行を含むリストを作成します
  2. 次のような小さなヘルパー関数を記述します。
    1. 文字列を取得します(手順1で作成したリストの要素を表します)
    2. 行を繰り返す
    3. char&countのマップを作成します。このマップはリターンタイプである必要があります。
  3. ここで、1番目の文字列は「 Line1 Map<String,Map<String,Int>>」、「Line2」などです。2番目の文字列はchar値です。インラインで記述されたマップは、ステップ2から返されたマップです。

これは機能するはずです。

于 2012-05-14T12:51:30.423 に答える
1

あなたがやろうとしていることについて考えてください。アルゴリズムをテキスト形式で書き留めます。変数を作成する必要がある場合は、変数に必要なタイプを確認してください。作成したアルゴリズムを実際のコードと比較します。

アルゴリズムの例:

  1. ファイルを開く
  2. 文字から整数へのマップのリストを作成します(ArrayList>)
  3. すべての行を読みます。各行について:
    1. その行のマップchar->intを作成します(HashMap)
    2. 行の各文字cについて:
      1. マップのカウントを更新します
    3. マップのリストに1行分のマップを保存します
于 2012-05-14T12:57:35.323 に答える