3

ここにこの長い文字列があり1000、テキスト ファイルにこのような行があります。そのテキスト ファイル内の各日付の出現頻度を計算したいのですが、どうすればそれを行うことができますか?

{"interaction":{"author":{"id":"53914918","link":"http:\/\/twitter.com\/53914918","name":"ITTIA","username":"s8c"},"content":"RT @fubarista: After thousands of years of wars I am not an optimist about peace. The US economy is totally reliant on war. It is the on ...","created_at":"Sun, 10 Jul 2011 08:22:16 +0100","id":"1e0aac556a44a400e07497f48f024000","link":"http:\/\/twitter.com\/s8c\/statuses\/89957594197803008","schema":{"version":2},"source":"oauth:258901","type":"twitter","tags":["attretail"]},"language":{"confidence":100,"tag":"en"},"salience":{"content":{"sentiment":4}},"twitter":{"created_at":"Sun, 10 Jul 2011 08:22:16 +0100","id":"89957594197803008","mentions":["fubarista"],"source":"oauth:258901","text":"RT @fubarista: After thousands of years of wars I am not an optimist about peace. The US economy is totally reliant on war. It is the on ...","user":{"created_at":"Mon, 05 Jan 2009 14:01:11 +0000","geo_enabled":false,"id":53914918,"id_str":"53914918","lang":"en","location":"Mouth of the abyss","name":"ITTIA","screen_name":"s8c","time_zone":"London","url":"https:\/\/thepiratebay.se"}}}

4

5 に答える 5

0

入力文字列はJSON形式であるため、JSON パーサーを使用することをお勧めします。これにより、解析がはるかに簡単になり、より重要な堅牢性が向上します。ただし、JSON の解析に入るには数分かかる場合がありますが、それだけの価値はあります。

その後、「created_at」タグを解析します。日付をキー、カウントを値としてマップを作成し、次のように記述します。

int estimatedSize = 500; // best practice to avoid some HashMap resizing
Map<String, Integer> myMap = new HashMap<>(estimatedSize);
String[] dates = {}; // here comes your parsed data, draw it into the loop later
for (String nextDate : dates) {
    Integer oldCount = myMap.get(nextDate);
    if (oldCount == null) { // not in yet
        myMap.put(nextDate, Integer.valueOf(1));
    }
    else { // already in
        myMap.put(nextDate, Integer.valueOf(oldCount.intValue() + 1));
    }
}
于 2013-05-28T09:25:54.203 に答える
0

JSON一致するのではなく、解析する必要がある文字列だと思います。この例を参照してくださいHERE

于 2013-05-28T06:35:19.137 に答える
0

必要な文字列を test.text にコピーし、C ドライブに配置します

パターンで私はあなたが求めていた日付のパターンを与えました、あなたはここでパターンをチェックすることができます

"(日|月|火|水|木|金|土)[,] \d\d​​ (1月|2月|3月|4月|5月|6月|7月|8月|9月|10月|11月|12月)\d \d\d\d"

コードを確認してください

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Test{
public static void main(String[] args) throws Exception {

    FileReader fw=new FileReader("c:\\test.txt");
    BufferedReader br=new BufferedReader(fw);
    int i;
    String s="";
    do
    {

        i=br.read();
        if(i!=-1)
        s=s+(char)i;


    }while(i!=-1);

    System.out.println(s);

    Pattern p=Pattern.compile
            (
                    "(Sun|Mon|Tue|Wed|Thu|Fri|Sat)[,] \\d\\d (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \\d\\d\\d\\d"
                );

    Matcher m=p.matcher(s);
    int count=0;
    while(m.find())
    {
        count++;
        System.out.println("Match number "+count);
        System.out.println(s.substring(m.start(), +m.end()));


    }
    }


}

ここに非常に良い説明がありますリンク 1リンク 2

于 2013-05-28T07:09:45.947 に答える