2017-01-06 11 views
0

Java初心者がここにあります。 私は現在、人間のDNAの一部を検索するプログラマーに取り組んでいます。 具体的には、StringBuilder.indexOf()を使用して、StingBuilder内のStringのすべての出現箇所を探したいと思います。しかし、私は最初のものだけでなく、すべての出来事が必要です。StringBuilder.indexOf()を使用して、発生している文字列のすべての位置を取得します。

コード:

public void search(String motive){ 
    int count = 0; 
    gene.indexOf(motive); // gene is the Stringbuilder 
    count++; 


} 

Iは、遺伝子のStringBuilderで動機プラス動機は遺伝子である頻度カウンタのすべての出現箇所を必要とします。 indexOf()は最初の発生を表示するだけなので、助けてください。

+0

'StringBuilder'には他の' indexOf'メソッドがありますか? –

+0

さて、 '' indexOf(String str、int fromIndex) 'がありますが、' str 'がどこに現れるかはまだ分かりませんので、あまり役に立ちません。 – Smunfr

+0

[Date()]からunix timestampを取得する(// stackoverflow.com/q/7784421) –

答えて

0

私は、遺伝子配列またはサブシーケンス内の特定のヌクレオチド配列のインデックスを探していると考えています。

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; 
} 

両方StringBuilderString従って、機能差がない、String.indexOf()の同じ静的な実装を使用します。しかし、 は、検索のためだけにStringBuilderをインスタンス化すると、余計になります。 は、文字列操作を管理するためのバッファも割り当てるため、無駄です。私は行くことができる:)、それは答えに追加されません。

+0

ありがとうございます。私のプロジェクトを続けるためには、多くの助けになります。問題は、私の仕事がStringBuilderのindexOf()メソッドを使用することだけだったということです。もし私がそれを理解できなければ、とにかくソリューションが目的を果たすでしょう。 – Smunfr

+0

@Smunfr StringBuilderベースの検索については、上記のソリューションに追加された追加のメソッドを参照してください。 – Frelling

関連する問題