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();
}
}
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();
}
}
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);
}
如{181757=DVLVPNAAKFDESGEFPWEIVRQAHSLGLMNPQIPEKYGGPGMTTLETALIVEALSYGCT}
{181757=DVLVPNAAKFDESGEFPWEIVRQAHSLGLMNPQIPEKYGGPGMTTLETALIVEALSYGCT}
{181757=DVLVPNAAKFDESGEFPWEIVRQAHSLGLMNPQIPEKYGGPGMTTLETALIVEALSYGCT}
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。
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);
}
}
}