11364|10090      --MAAAFRRGCRVLRSVSHFECRTQHSKAAHKQEPGLG-FSFELTEQQKEFQATARKFAR
24158|10116      --MAAALRRGYKVLRSVSHFECRAQHTKPSLKQEPGLG-FSFELTEQQKEFQTIARKFAR
34|9606          --MAAGFGRCCRVLRSISRFHWRSQHTKANRQREPGLG-FSFEFTEQQKEFQATARKFAR
406283|7955      MLFNKVLRAGVQAGLRFQGTSAQASAKAATASLKGGNGGFSFELTEQQKEFQEVARKFAR
38864|7227       --MAFLNKLAAPALR---QLVSQSRAYAAVSHVSPNGT--SFALTEDQLQLQELARKFTR
181757|6239      ----MLSRIATSSLG----LSRSATGVIATQSRQ-----ISFDLSETQKEIQDAALKFSK
                                        :    .    .      ** ::* * ::*  * **::11364|10090      EEIIPVAPEYDKSGEYPFPLIKRAWELGLINAHIPESCGGLGLGTFDACLITEELAYGCT
24158|10116      EEIIPVAPDYDKSGEYPFPLIKRAWELGLINTHIPESCGGLGLGTFDACLITEELAYGCT
34|9606          EEIIPVAAEYDKTGEYPVPLIRRAWELGLMNTHIPENCGGLGLGTFDACLISEELAYGCT
406283|7955      EEIVPAAPSYDRSGEYPFPLIKRAWELGLMNGHIPEDCGGMGQGIFDACLITEELAYGCT
38864|7227       EEIIPVAAQYDKSGEYPWPIIKKAWELGLMNNHIPADIGGLDLDVFTTCLSAEELAYGCT
181757|6239      DVLVPNAAKFDESGEFPWEIVRQAHSLGLMNPQIPEKYGGPGMTTLETALIVEALSYGCT
上面是我要处理的文件,要求:如果左边字符|前的数字(字符型)相等,把右边的字符字符串连在一起。
下面是我写的代码,结果无法连在一起。请问有什么问题,估计问题发生在红色部份,我是初学者,望高手能帮个忙。
package cn.escore.readfile;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Readfile{
File file=new File("e://3.aln");
String line,proteinid,tag;
StringBuffer tagbuf;
public Readfile() throws IOException{
BufferedReader input=new BufferedReader(new FileReader(file));
while((line=input.readLine())!=null){
Pattern p1=Pattern.compile("([0-9]{1,})\\|+");
Matcher m1=p1.matcher(line);
while(m1.find()){
proteinid=m1.group();
proteinid=proteinid.replace("|", "");
p(proteinid.toString());
   }
Pattern p2=Pattern.compile("[A-Z\\-]{1,}");
Matcher m2=p2.matcher(line);
while(m2.find()){
tag=m2.group();
 tagbuf=new StringBuffer(tag);
p(tagbuf.toString());
}
Map<String,StringBuffer> ma=new HashMap<String,StringBuffer>();
     if(ma.containsKey(proteinid)){
      StringBuffer tagtemp=ma.get(proteinid);
      tagbuf=tagbuf.append(tagtemp);
     // ma.put(proteinid, tagbuf);
      p("try="+tagbuf);
     }
     else{
      ma.put(proteinid, tagbuf);
     }
     p(ma);
}
}
public static void p(Object o){
System.out.println(o);
}
public static void main(String[] args) throws IOException{
Readfile rf=new Readfile();

}
}

解决方案 »

  1.   

    tagbuf=new StringBuffer(tag); 
    p(tagbuf.toString()); 

    Map <String,StringBuffer> ma=new HashMap <String,StringBuffer>(); 
        if(ma.containsKey(proteinid)){ 
        StringBuffer tagtemp=ma.get(proteinid); 
        tagtemp.append(tagbuf.toString()); 
        // ma.put(proteinid, tagbuf); 
        p("try="+tagtemp);     } 
        else{ 
        ma.put(proteinid, tagbuf); 
        } 
        p(ma); 

      

  2.   

    测试过,不能连在一起,不知道是什么原因,运行后,同一个KEY的值都变相同了。
    如{181757=DVLVPNAAKFDESGEFPWEIVRQAHSLGLMNPQIPEKYGGPGMTTLETALIVEALSYGCT}
    {181757=DVLVPNAAKFDESGEFPWEIVRQAHSLGLMNPQIPEKYGGPGMTTLETALIVEALSYGCT}
    {181757=DVLVPNAAKFDESGEFPWEIVRQAHSLGLMNPQIPEKYGGPGMTTLETALIVEALSYGCT}
      

  3.   


    11364 --MAAAFRRGCRVLRSVSHFECRTQHSKAAHKQEPGLG-FSFELTEQQKEFQATARKFAREEIIPVAPEYDKSGEYPFPLIKRAWELGLINAHIPESCGGLGLGTFDACLITEELAYGCT 
    24158 --MAAALRRGYKVLRSVSHFECRAQHTKPSLKQEPGLG-FSFELTEQQKEFQTIARKFAREEIIPVAPDYDKSGEYPFPLIKRAWELGLINTHIPESCGGLGLGTFDACLITEELAYGCT 
    34          --MAAGFGRCCRVLRSISRFHWRSQHTKANRQREPGLG-FSFEFTEQQKEFQATARKFAREEIIPVAAEYDKTGEYPVPLIRRAWELGLMNTHIPENCGGLGLGTFDACLISEELAYGCT
    406283      MLFNKVLRAGVQAGLRFQGTSAQASAKAATASLKGGNGGFSFELTEQQKEFQEVARKFAR  EEIVPAAPSYDRSGEYPFPLIKRAWELGLMNGHIPEDCGGMGQGIFDACLITEELAYGCT 
    38864      --MAFLNKLAAPALR---QLVSQSRAYAAVSHVSPNGT--SFALTEDQLQLQELARKFTR EEIIPVAAQYDKSGEYPWPIIKKAWELGLMNNHIPADIGGLDLDVFTTCLSAEELAYGCT  
    181757      ----MLSRIATSSLG----LSRSATGVIATQSRQ-----ISFDLSETQKEIQDAALKFSK DVLVPNAAKFDESGEFPWEIVRQAHSLGLMNPQIPEKYGGPGMTTLETALIVEALSYGCT 数字部份是KEY,字母是值。就是把每一行相同数字后面的字符串连在一起,组成一个新的KEY-value。
        
         
      

  4.   

    简单给你写了个,细节你自己再改改吧。准备接分,哈哈。import java.util.*;
    import java.util.Map.Entry;
    import java.io.*;public class ALNFile {
    static File file = new File("C:/1.aln");
    static HashMap<String, String> map = new HashMap<String, String>();
    static String tempString, key, value, result;

    public static void operate(){
    try{
    BufferedReader bf = new BufferedReader(new FileReader(file));
    String text;

    while((text=bf.readLine()) != null){
    if(text.matches("\\d+.*")){
    key = text.split("\\|")[0];
    value = text.split("\\|")[1].split("\\s+")[1];

    if(!map.containsKey(key)){
    map.put(key, value);
    }
    else{
    tempString = map.get(key);
    value += tempString;
    map.remove(key);
    map.put(key, value);
    }
    }
    }

    }catch(FileNotFoundException e){

    }catch(IOException e){

    }
    }

    public static void main(String args[]){
    operate();

    Set<Entry<String, String>> entries = map.entrySet(); Iterator<Entry<String, String>> iterator =  entries.iterator();

    while(iterator.hasNext()){
    Map.Entry<String, String> mapEntry = iterator.next();

    result = mapEntry.getKey() +" ";
    result += mapEntry.getValue();

    System.out.println(result);
    }
    }
    }