各位高手,我有一个文本文件,格式基本上是这样的:
[Term]
id: MI:0491
name: in silico
def: "Results generated by predictive bioinformatics approaches rather than experimental data.\nOBSOLETE as a full host organisms description is recommended using tax id == -1 as convention to refer to 'in vitro' interaction." [PMID:14755292]
related_synonym: "Predictive" []
is_obsolete: true
[Term]
id: MI:0489
name: source database
def: "Database that orignally provided the interaction record for exchange purposes." [PMID:14755292]
is_a: MI:0444 ! database citation
希望从这个文本文件中查找到每个[Term]中各个变量值如:得到name的值in silico,并将每个[Term]的各个变量记录下来

解决方案 »

  1.   

    需要知道 Term 中一共有多少个属性?
      

  2.   

    一行一行读取 然后以“:”分割字符串 分割后前面的作为key后面的作为value 放到map里面遇到下一个term的时候 把map放到list里面
      

  3.   

    id: MI:0489
    name: source database
    def: "Database that orignally provided the interaction record for exchange purposes." [PMID:14755292]
    is_a: MI:0444 ! database citation你是说要得到id,name,def,purposes这几个后面的内容吗?
      

  4.   


    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    public class Main {
    public static void main(String[] args) throws Exception{
    System.out.println(getIntArrayFromFile("f:\\test.txt"));
        }
    public static List<Map<String,String>> getIntArrayFromFile(String file) throws Exception{
    List<Map<String,String>> list= new ArrayList<Map<String,String>>();
    BufferedReader br=new BufferedReader(new FileReader(file));
    String str=null;
    Map<String,String> map=null;
    while((str=br.readLine())!=null){
    if("[Term]".equals(str.trim())){
    if(map!=null&&map.size()>0){
    list.add(map);
    }
     map=new HashMap<String,String>();
    }else{
    String[] array=str.split(":",2);
    if(map!=null&&array.length==2){
    map.put(array[0], array[1]);
    }
    }

    }
    br.close();
    return list;
    }
    }
    测试文件:test.txt[Term]
    id: MI:0491
    name: in silico
    def: "Results generated by predictive bioinformatics approaches rather than experimental data.\nOBSOLETE as a full host organisms description is recommended using tax id == -1 as convention to refer to 'in vitro' interaction." [PMID:14755292]
    related_synonym: "Predictive" []
    is_obsolete: true
    [Term]
    id: MI:0489
    name: source database
    def: "Database that orignally provided the interaction record for exchange purposes." [PMID:14755292]
    is_a: MI:0444 ! database citation
      

  5.   

    测试文件同上;import java.util.*;
    import java.io.*;
    public class Test2 
    {
    public static void main(String[] args) throws Exception{
               BufferedReader br = null;
       boolean start = false;
       int num = 0;
       List<String> array = new ArrayList<String>();
       try{
    br = new BufferedReader(new FileReader("test.txt"));
    String s = null;
    while((s = br.readLine().trim()) != null){
    if(s.equals("[Term]")){
    num++;
    start = true;
    }else if(num%2==0){
    start =false;
    num = 0;
    }else if(start){
    String[] str = s.split(":",2);
    array.add(str[0]);
    System.out.println(s);
    //6楼能不能说下结果阈值的具体用法,是否表示分成两段
    //我对API例子中的其它数值不大理解。
    }
    }

    br.close();
       }catch(Exception e){
       }finally{
    for(int i=0;i<array.size();i++) 
    System.out.print(array.get(i) + ",");
       }
        }
    }
      

  6.   

    换成proerties,或者xml文件,读取方便