说详细点,呵呵:
比如:
我的标记列表是用一个XML文件表示的:
...
<Entry id="0" start="ID     --" end="]]" field="id"/> 
<Entry id="1" start="Title  --" end="]]" field="title"/>
<Entry id="2" start="Email  --" end="\n" field="email"/>
<Entry id="2" start="Content--" end="[END]" field="content"/>
....
<Entry id="n" start="Notes  --" end="^_^" field="notes"/>而我现在要分析的文本大概是:
....一些废话,马上开始了有用内容...
ID     --...一个id...]]
Title  --...这是标题...]]
....中间夹杂一点废话.....
Email  --..这是Email字段..
Content--.....这是很多行文字,内容不定,可能包含标记的中的特殊字符,
         ...........................................afsasdfas,df,saf.asf
         dfkasfasdfaskl;fkls;afk asfkas fasf
         asfasklfasl;fsadfj..............[END]
............................................
Notes --...这是最后字段了......
        ..sd.af.sadfadfas.....^_^
....又是一段长短不一的废话,马上开始了有用内容...
ID    --.......
Title --.......
Email --........
............
等等,大概是这样的循环。同时,有时文本中标记的出现顺序有可能互换,比如在某一段
Title在后,Email在前。或者有一段没有Email字段,不很规则。事先将该XML文件读入到了一个HashMap,然后分析文本,不断的提取出新纪录,保存。。

解决方案 »

  1.   

    如果匹配是以行来进行的
    可以用startsWith,endsWith来匹配。当然如果要进一步提高效率,可以考虑使用多线程。
    我也认为影响效率的不是读文件而是匹配。
    可以考虑这样来分配线程:
    使用一个线程来读文件,多个线程来匹配。
    读文件线程将读的内容以行为单位顺序放到几个对队列里,每个队列对应一个线程,
    匹配线程对每个对列的内容进行处理。当然这种方法的前提是我们最后的结果不考虑在文件中的顺序。