Java 与最大出现次数匹配的字符串

Java 与最大出现次数匹配的字符串,java,string,string-matching,Java,String,String Matching,我这里有一个长字符串,在一个文本文件中有像这样的1000行。我想计算该文本文件中每个日期出现的频率。知道我该怎么做吗 {“互动”:{“作者”:{“id”:“53914918”,“链接”:“http:\/\/twitter.com\/53914918”,“名称”:“ITTIA”,“用户名”:“s8c”},“内容”:“RT@fubarista:经过数千年的战争,我对和平不是一个乐观主义者。美国经济完全依赖于战争。这是在……”,“创造于”:“太阳,2011年7月10日08:22:16+0100”,“i

我这里有一个长字符串,在一个文本文件中有像这样的
1000
行。我想计算该文本文件中每个日期出现的频率。知道我该怎么做吗


{
“互动”:{“作者”:{“id”:“53914918”,“链接”:“http:\/\/twitter.com\/53914918”,“名称”:“ITTIA”,“用户名”:“s8c”},“内容”:“RT@fubarista:经过数千年的战争,我对和平不是一个乐观主义者。美国经济完全依赖于战争。这是在……”,“创造于”:“太阳,2011年7月10日08:22:16+0100”,“id”:“1e0aac556a44a400e07497f48f024000”,“链接”:“http:\/\/twitter.com\/s8c\/statuses\/89957594197803008”,“模式”:{“版本”:2},“来源”:“oauth:258901”,“类型”:“twitter”,“标记”:[“attretail”},“语言”:{“信心”:100,“标记”:“en”},“显著性”:{“内容”:{“情感”:4},“twitter”{“创建于”:“Sun,2011年7月10日:22:16+0100”,“id”89958”:提到:“[“fubarista”],“来源”:“oauth:258901”,“文本”:“RT@fubarista:在经历了数千年的战争之后,我对和平不是一个乐观主义者。美国经济完全依赖于战争。它依赖于…”,“用户”:{“created_at”:“Mon,05 Jan 2009 14:01:11+0000”,“geo_enabled”:false,“id”:53914918,“id_str”:“53914918”,“lang”:“en”,“location”:“深渊之口”“,”name“:”ITTIA“,”screen\u name“:”s8c“,”timeu\u zone“:”London“,”url“:”https:\/\/thepiratebay.se“}}}}

使用类RandomAccessFile和BufferedReader读取部分数据,您可以使用字符串解析来计算每个日期的频率…

每个日期都有一些稳定的模式,如\d\d(一月|二月|…)20\d\d 因此,您可以使用正则表达式(Java中的模式类)提取这些日期
然后,您可以使用HashMap来增加某对的值,其中key是找到的日期。很抱歉没有代码,但是我希望这对您有所帮助:)

我认为它是一个
JSON
字符串,您应该解析它,而不是匹配它。
请参见此示例

将所需字符串复制到test.text并将其放置在c驱动器中 在工作代码中,我使用了模式和匹配器类

在模式中,我给出了你要求的日期模式,你可以在这里检查模式

“(星期一星期二星期三星期四星期五星期六)[,]\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()));


    }
    }


}
这里的描述非常好,

您的输入字符串是格式的,因此我建议您使用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));
    }
}
int estimatedSize=500;//避免HashMap调整大小的最佳实践
Map myMap=newhashmap(estimatedSize);
字符串[]日期={};//这里是您解析的数据,稍后将其绘制到循环中
for(字符串下一个日期:日期){
整数oldCount=myMap.get(nextDate);
如果(oldCount==null){//尚未输入
myMap.put(nextDate,Integer.valueOf(1));
}
else{//已在中
myMap.put(nextDate,Integer.valueOf(oldCount.intValue()+1));
}
}

这是一个JSON字符串,您可以使用一些库将其转换为JSON对象,这将使您的生活更轻松。