# 5'->3'側への伸長と、3'->5'側への伸長を試してみるバージョン package train; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Map; public class Day4 { static int k=21; public static ArrayList> sortHash(HashMap map){ ArrayList> mapValuesList = new ArrayList>(map.entrySet()); Collections.sort(mapValuesList, new Comparator>() { @Override public int compare(Map.Entry entry1, Map.Entry entry2) { return ((Integer) entry2.getValue()).compareTo((Integer) entry1.getValue()); } }); return mapValuesList; } public static String searchfor(HashMap map, ArrayList fin, String kstr){ String tempk2=kstr.substring(1,k); String[] acgt={"A","C","G","T"}; int maxcov=0; String maxbp=""; for(String a : acgt){ if(map.get(tempk2+a)!=null && map.get(tempk2+a)>maxcov){ maxbp=a; maxcov=map.get(tempk2+a); } } if(maxcov>0 && !fin.contains(tempk2+maxbp)){ fin.add(tempk2+maxbp); return maxbp+searchfor(map, fin, tempk2+maxbp); } return ""; } public static String searchback(HashMap map, ArrayList fin, String kstr){ String tempk2=kstr.substring(0,k-1); String[] acgt={"A","C","G","T"}; int maxcov=0; String maxbp=""; for(String a : acgt){ if(map.get(a+tempk2)!=null && map.get(a+tempk2)>maxcov){ maxbp=a; maxcov=map.get(a+tempk2); } } if(maxcov>0 && !fin.contains(maxbp+tempk2) ){ fin.add(maxbp+tempk2); return searchback(map, fin, maxbp+tempk2)+maxbp; } return ""; } public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ HashMap map = new HashMap(); File file = new File("C:\\Users\\asakawa\\Desktop\\SRR987657.fastq"); BufferedReader br; int n=0; try { br = new BufferedReader(new FileReader(file)); String str = br.readLine(); while(str != null){ n++; if(n%4==2){ for(int i=0;i<=str.length()-k;i++){ String tempk=str.substring(i, i+k); if(map.get(tempk)==null){ map.put(tempk, 1); }else{ map.put(tempk, map.get(tempk)+1); } } } if(n%400000==0){ System.out.println(n/4+"リード読み込み完了"); } str = br.readLine(); } br.close(); System.out.println(n/4+"リード読み込み完了"); ArrayList> sortedlist=sortHash(map); ArrayList fin=new ArrayList(); for(int i=0;i1000){ System.out.println(">"+sortedlist.get(i).toString()+"_"+tempstr.length()); System.out.println(tempstr); } } } } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } } さらに工夫すべき点としては、伸長するときに相補鎖を調べるとか、分岐しているような箇所は伸長せずに止めるとか、一定の出現頻度以下のk-merは無視するとか、色々と必要。