私は、遺伝子配列またはサブシーケンス内の特定のヌクレオチド配列のインデックスを探していると考えています。
package jcc.tj.dnamatch;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Gene {
private String gene;
public Gene() {}
public Gene(String gene) {
this.gene = gene;
}
public List<Integer> find(String seq) {
List<Integer> indices = new ArrayList<Integer>();
Pattern pat = Pattern.compile(seq);
Matcher m = pat.matcher(gene);
while (m.find())
indices.add(m.start());
return indices;
}
public String getGene() {
return gene;
}
public void setGene(String gene) {
this.gene = gene;
}
}
上記の例では、パターンを見つけることのMatcherを使用します。次の例のクラスには、見つけることが、Javaの正規表現ライブラリを使用して、一般的なアプローチを示しています。他のStringベースのアルゴリズムがより効率的かもしれませんが、Matcherはあらゆるタイプのテキストパターン検索に汎用的なソリューションを提供します。
文字列(ATCG)としてのコード化は、非常に柔軟で便利なので、文字列ベースのツールを使用してシーケンスやサブシーケンスを解析して特徴付けることができます。残念ながら、それらはうまく拡張できません。そのような場合には、配列を表現し管理するためのより具体的なバイオインフォマティクス技術を検討する方が良いでしょう。
特定のテクニックについては、参考文献Next Generation Sequencing Technologies and Challenges in Sequence Assemblyの第2章 - 次世代シーケンシングのアルゴリズムとデータ構造を参照してください。より詳細なPDFのプレビューはthis Googleのリンクから入手できます。私はそれが永久に働くことを保証するものではありません。
BioJavaもご覧ください。しかし、私はあなたをJavaから落としたくないですが、Perlはシーケンス解析のもう一つの良い選択肢です。 Beginning Perl for Bioinformatics; Perl and Bioinformatics;またはBioPerl。
私はこの答えがTMIかもしれないことを認識しています。しかし、それがあなたや他の人がより適切な解決法を見つけるのを助けるならば、その目的を果たしました。
編集:以下のコメントをもとに
、これは検索がStringBuilder.indexOf()
することによって達成することが 要件与えられた宿題の質問、のように見えます。次の方法は、それに応じて検索を実行します。
public List<Integer> findBySb(String seq) {
List<Integer> indices = new ArrayList<Integer>();
StringBuilder sb = new StringBuilder(gene);
int strIdx = 0;
while (strIdx < sb.length()) {
int idx = sb.indexOf(seq, strIdx);
if (idx == -1)
break;
indices.add(idx);
strIdx = idx + seq.length();
}
return indices;
}
同じ文字列と同じindexOf()
のアプローチを直接使用できます。
public List<Integer> findByString(String seq) {
List<Integer> indices = new ArrayList<Integer>();
int strIdx = 0;
while (strIdx < gene.length()) {
int idx = gene.indexOf(seq, strIdx);
if (idx == -1)
break;
indices.add(idx);
strIdx = idx + seq.length();
}
return indices;
}
両方StringBuilder
とString
従って、機能差がない、String.indexOf()
の同じ静的な実装を使用します。しかし、 は、検索のためだけにStringBuilder
をインスタンス化すると、余計になります。 は、文字列操作を管理するためのバッファも割り当てるため、無駄です。私は行くことができる:)、それは答えに追加されません。
'StringBuilder'には他の' indexOf'メソッドがありますか? –
さて、 '' indexOf(String str、int fromIndex) 'がありますが、' str 'がどこに現れるかはまだ分かりませんので、あまり役に立ちません。 – Smunfr
[Date()]からunix timestampを取得する(// stackoverflow.com/q/7784421) –