Как я могу создать список пользовательских классов с двумя полями и получить вывод? - PullRequest
2 голосов
/ 23 февраля 2011

Мне нужно составить список последовательности генов в Java и начальные позиции частей, которые меня интересуют. Я использую .txt файл в качестве входных данных, а затем искать "GT" в последовательности. Как только я нахожу это, я хочу сохранить это в массиве с соответствующим индексом. Я не мог этого сделать. Пожалуйста, ведите меня.

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;


class Signal{
    public String signal;
    public int  pos;
    public Signal(String s, int p) {
        s = signal;
        p = pos;

    }


public static String inputSequence(String filename) throws IOException{


        FileInputStream stream = new FileInputStream(new File(filename));

        try {
            FileChannel fc = stream.getChannel();
            MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());

    return Charset.defaultCharset().decode(bb).toString();

}
        finally{
            stream.close();
        }
    }
    public static void main(String[] args) {

     String c1 = "GT";
     String seq = null;
         List<Signal> s2 = new ArrayList<Signal>();
         String s1;
         int i;

         try {
            seq = inputSequence(path);
         } catch (IOException ex) {
            Logger.getLogger(Signal.class.getName()).log(Level.SEVERE, null, ex);
         }
         for (i = 0; i < seq.length() - 2; i++ ) {
     s1 = seq.substring(i,i+2);
        if (s1.equals(c1)){

            Signal ss = new Signal(s1, i);
            s2.add(ss);

}

    }
         System.out.print(s2);

    }
}

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Ваш конструктор должен быть следующим:

public Signal(String s, int p) {
    signal = s;
    pos = p;
}

После этого все должно работать нормально.

0 голосов
/ 23 февраля 2011

Вы можете использовать indexOf в цикле, чтобы найти все вхождения "GT". Это показано ниже:

 String c1 = "GT";
 String seq = null;
 List<Signal> s2 = new ArrayList<Signal>();

 try {
    seq = inputSequence(path);
 } catch (IOException ex) {
    Logger.getLogger(Signal.class.getName()).log(Level.SEVERE, null, ex);
 }

 int index = seq.indexOf(c1, 0);
 do{
      if(index != -1){
          Signal ss = new Signal(c1, index);
          s2.add(ss);
          System.out.println(index);
      }
      index = seq.indexOf(c1, index+2);
 }while(index != -1);

 System.out.println(s2);

Чтобы распечатать список сигналов, вам нужно переопределить toString в вашем Signal классе:

@Override
public String toString(){
    return "(" + signal + "," + pos + ")";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...