我有记录工作日记的习惯,每次的格式都是:
(1月1日)
今天过的很好(1月2日)
今天过的也很好现在感觉不方便,因为我打开之后需要翻到最后下面才能看到我昨天干了什么,今天需要干什么。。
作为程序员,我想写一个导致的功能,就像
(1月2日)
今天过的也很好(1月1日)
今天过的很好这样。。
功能不难,但是数据量比较大,该如何实现最简单,运算次数最低?

解决方案 »

  1.   

    功能不难,但是数据量比较大,该如何实现最简单,运算次数最低?
    当然是使用数据库方便了,例如文本数据库Sqlite,按时间逆序就可以了
      

  2.   

    还有一种方式,在文件的前例如128K用来存储一个日记的在文件中的起始位置(甚至修改日期等简要数据),每个日记按块存储,每块例如10K,而日记的前部分会记录这个日记的后面几块的位置(如果10K保存不完)。
    查找的时候,先从前面直接查找,然后再用得到日志的位置去把日记读出来。
    这种方式是使用空间换取时间与效率。
    相当于在保存日志的文件里同时保存了它的索引。
    这种方式难一些,但是做起来有意思。
      

  3.   


    //本类中的方法实现的是倒置一个txt文件的功能。单位为每天的
    public class ConvertTxt {
    public static void main(String[] args) throws Exception {

    Map<Integer,String> map=new ConvertTxt().convert("d:\\工作日记.txt");
    String result="";

    /*System.out.println(map.size());
    System.out.println(map.get(map.size()-1));*/

    for(int i=map.size()-1;i>0;i--){
    System.out.println(map.get(i));
    result+=map.get(i);
    }
    /*for(Integer i:map.keySet()){
    //System.out.println(map.get(i));
    result+=map.get(i);
    }*/
    String file="d:\\工作日记convert.txt";
    writeInTxt(result,file);
    }
    public static void writeInTxt(String result,String file) throws Exception {
    // TODO Auto-generated method stub
    ifexist(file);
    PrintWriter pw=new PrintWriter(new FileWriter(file));
    pw.print(result);
    pw.flush();
    System.out.println("写入成功");

    }
    //查看是否存在该文件
    public static void ifexist(String file) {
    // TODO Auto-generated method stub
    File f=new File(file);
    if(!f.exists()){
    System.out.println("文件不存在");
    try {
    f.createNewFile();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }else{
    System.out.println("文件存在");
    }
    }
    public Map convert(String file) throws Exception{

    String regEx="\\(1月.*日\\)"; 

    FileReader fr=new FileReader(file);
    BufferedReader br=new BufferedReader(fr);
    String str="";
    Map<Integer,String> map=new HashMap<Integer, String>();
    int i=0;
    String passage="";
    while((str=br.readLine())!=null){
    boolean result=Pattern.compile(regEx).matcher(str).find();
    if(result){
    map.put(i, passage);
    passage="";
    passage=str+"\n";
    i++;
    }else{
    passage=passage+str+"\n";
    }
    }
    map.put(i, passage);
    //System.out.println("----------------------");
    return map;

    }
    }
    我先把功能实现了,然后在想想应该怎么优化。