練習問題の回答例_1

練習問題3までをやってみた回答例

package hellow_world;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
 
public class Main {
 
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		try{
			File file = new File("C:\\ecoli-test.txt");
			BufferedReader br = new BufferedReader(new FileReader(file));
 
			String genome="";
			String str = br.readLine();
			while(str != null){
				//System.out.println(str);
 
				str = br.readLine();
				genome = genome + str;
 
			}
			br.close();
 
			//制限酵素サイト検索
			int oldPos = 0;
			int cntOver10kbp = 0;
			int cntUnder10kbp = 0;
			for(int i=0; i<genome.length()-6; i++){
				if((genome.substring(i, i+6)).equals("GGATCC")){ //BamHIの認識サイトはGGATCC
					System.out.println(i);
					if(i - oldPos >= 10000){
						cntOver10kbp++;
					}else{
						cntUnder10kbp++;
					}
					oldPos=i;
				}
			}
			System.out.println("10kbp以上は"+cntOver10kbp+"箇所、10kbp未満は"+cntUnder10kbp+"箇所");
		}catch(Exception e){
			System.out.println(e);
		}
	}
 
}

練習問題5までと、文字列連結の高速化を行った例

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
 
public class Main1 {
 
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
 
		try{
			File file = new File("C:\\ecoli.fasta");
			BufferedReader br = new BufferedReader(new FileReader(file));
			StringBuilder sb = new StringBuilder();
			String str = br.readLine();
 
			while(str != null){
				str=br.readLine();
				sb.append(str);
			}
			br.close();
			String ecoli=new String(sb);
			System.out.println(ecoli.length());
 
			int nBam=0;                   //配列に入ったBamHIの数を記憶しておく
			int[] arrBam=new int[10000]; //大きめの配列を準備しておく
			for(int i=0; i<ecoli.length()-6; i++){
				if(ecoli.substring(i, i+6).equals("GGATCC")){
					arrBam[nBam]=i;
					nBam++;
				}
			}
			System.out.println(nBam);
 
			int nHind=0;
			int[] arrHind=new int[10000];
			for(int i=0; i<ecoli.length()-6; i++){
				if(ecoli.substring(i, i+6).equals("AAGCTT")){
					arrHind[nHind]=i;
					nHind++;
				}
			}
			System.out.println(nHind);
 
			int n1=0; //左側がBamHI、右側がHindIIIで切断される場合を検索
			for(int i=0;i<nBam;i++){
				for(int j=0; j<nHind;j++){
					if(arrHind[j+1]>arrBam[i] && arrBam[i+1]>arrHind[j+1] && arrBam[i]>arrHind[j] && arrHind[j+1]-arrBam[i]>=10*1000){
							System.out.println("nBam:"+i+", nHind:"+j+", arrBam:"+arrBam[i]+", arrHind:"+arrHind[j]);
							n1++;
					}
				}
			}
			System.out.println(n1);
 
			int n2=0; //左側がHindIII、右側がBamHIで切断される場合を検索
			for(int j=0;j<nHind;j++){
				for(int i=0; i<nBam;i++){
					if(arrBam[i+1]>arrHind[j] && arrHind[j+1]>arrBam[i+1] && arrHind[j]>arrBam[i] && arrBam[i+1]-arrHind[j]>=10*1000){
							System.out.println("nBam:"+i+", nHind:"+j+", arrBam:"+arrBam[i]+", arrHind:"+arrHind[j]);
							n2++;
					}
				}
			}
			System.out.println(n2);
 
			System.out.println(n1+n2);
 
		}catch(Exception e){
			System.out.println(e);
		}
 
	}
 
}