我有记录工作日记的习惯,每次的格式都是:
(1月1日)
今天过的很好(1月2日)
今天过的也很好现在感觉不方便,因为我打开之后需要翻到最后下面才能看到我昨天干了什么,今天需要干什么。。
作为程序员,我想写一个导致的功能,就像
(1月2日)
今天过的也很好(1月1日)
今天过的很好这样。。
功能不难,但是数据量比较大,该如何实现最简单,运算次数最低?
(1月1日)
今天过的很好(1月2日)
今天过的也很好现在感觉不方便,因为我打开之后需要翻到最后下面才能看到我昨天干了什么,今天需要干什么。。
作为程序员,我想写一个导致的功能,就像
(1月2日)
今天过的也很好(1月1日)
今天过的很好这样。。
功能不难,但是数据量比较大,该如何实现最简单,运算次数最低?
当然是使用数据库方便了,例如文本数据库Sqlite,按时间逆序就可以了
查找的时候,先从前面直接查找,然后再用得到日志的位置去把日记读出来。
这种方式是使用空间换取时间与效率。
相当于在保存日志的文件里同时保存了它的索引。
这种方式难一些,但是做起来有意思。
//本类中的方法实现的是倒置一个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;
}
}
我先把功能实现了,然后在想想应该怎么优化。