给指定字符串格式为时间格式,如:当前检索时间为 : 2012-09-05 15:15:04
#1,AA,0,2012-09-05 15:15:01
#2,BB,0,2012-09-05 15:15:02
#3,CC,-35.2,2012-09-05 15:15:03
#4,EE,-8.58,2012-09-05 15:15:04
#5,FF,7,2012-09-05 15:15:05
#6,HH,35.38,2012-09-05 15:15:06
#7,II,9.29,2012-09-05 15:15:07
.
.
.
.
#9999,XX,9.29,2012-09-05 16:15:07文本文件中含有与时间 : 2012-09-05 15:15:04 匹配的项,
就取出当前条目  #4,EE,-8.58,2012-09-05 15:15:04
请高手帮忙。如何快速的取出存在的数目(可能含有多条)
Ps : 分不够。有满意的答案,俺再加分。。

解决方案 »

  1.   

    用正则啊。。 如果按你说的那样 用indexof都可以
      

  2.   


    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;public class Test { public static void main(String[] args){
    try {
    FileInputStream fin = new FileInputStream("info.txt");
    InputStreamReader fr = new InputStreamReader(fin);
    BufferedReader br = new BufferedReader(fr);

    String time = "2012-09-05 15:15:04";
    String line = br.readLine();
    while (line != null) {
    if (line.indexOf(time) > 0) {
    System.out.println(line);
    }

    line = br.readLine();
    }
    br.close();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
      

  3.   

    if (line.contains("2012-09-05 15:15:04"))
        System.out.println(line);
      

  4.   

    自己搞的。这样的思路。
    以时间为key打造成一个map的对象。
    然后直接取map的key值。
      

  5.   

    两种思路
    1是把文件内容都装进内存,key为时间戳,value为你每行存储的东西。
    2把文件按一定的规则划分成小文件,几千或者几百均可,通过当前检索时间可以定位到某个文件,在从该文件查找看是否存在你需要的东东。
      

  6.   

    1 每行解析一次是没办法的,无论是正则还是indexOf
    2 行数多?你可以用并行啊,开多个线程一起解析(参考生产者,消费者模式)
    3 一些类库支持全文检索,你也可以参考。但建立全文也需要时间。
      

  7.   

    看应用场景,大批量文本处理(~1000w),可用shell,很快就可以得到结果。或者shell+db。grep "2012-09-05 15:15:04" info.txt >test.txt 。当然它还可以处理更复杂的逻辑。像楼主的情况,100w条,用内存计算速度比较快。即以map来封装,key为时间戳,value为你每行存储的东西.如果多个文件,可以用多线程来读取。速度也很快。看你机器配置了