Java 如何创建包含两个字段的自定义类列表并获得输出?
我需要在Java中列出一个基因序列,以及我关心的部分的起始位置。我使用一个.txt文件作为输入,然后按顺序搜索“GT”。一旦找到它,我想将它存储在一个具有相应索引的数组中。我不能让它发生。请引导我Java 如何创建包含两个字段的自定义类列表并获得输出?,java,arrays,class,list,input,Java,Arrays,Class,List,Input,我需要在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.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);
}
}
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.nio.MappedByteBuffer;
导入java.nio.channels.FileChannel;
导入java.nio.charset.charset;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.logging.Level;
导入java.util.logging.Logger;
类信号{
公共字符串信号;
公共int pos;
公共信号(字符串s,整数p){
s=信号;
p=pos;
}
公共静态字符串输入序列(字符串文件名)引发IOException{
FileInputStream=新FileInputStream(新文件(文件名));
试一试{
FileChannel fc=stream.getChannel();
MappedByteBuffer bb=fc.map(FileChannel.MapMode.READ_ONLY,0,fc.size());
返回Charset.defaultCharset().decode(bb.toString();
}
最后{
stream.close();
}
}
公共静态void main(字符串[]args){
字符串c1=“GT”;
字符串seq=null;
列表s2=新的ArrayList();
字符串s1;
int i;
试一试{
seq=输入顺序(路径);
}捕获(IOEX异常){
Logger.getLogger(Signal.class.getName()).log(Level.SEVERE,null,ex);
}
对于(i=0;i
您的构造函数应如下所示:
public Signal(String s, int p) {
signal = s;
pos = p;
}
之后,它应该可以正常工作。您可以在循环中使用
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);
试着准确地解释什么是你不能工作的,这样人们就可以看到一个特定的问题。实际上,这个构建成功了,但我无法得到我想要的输出。我试图将其作为信号类的数组列表,我希望得到如下输出:[(GT,5),(GT,12),(GT,27)],但是,我得到的是:[信号。Signal@42e816]我需要弄清楚在列表中存储两个字段(一个字符串,一个整数)多亏了dogbane,不能完全解释我的问题是我的错。我找到了所有的GT。然而,我试图将其作为信号类的arrayList,我希望得到如下输出:[(GT,5),(GT,12),(GT,27)],但我得到的是:[信号。Signal@42e816]我有一个问题,dogbane,如果我想检查序列中的两个字符串,比如c1=“GT”c2=“ATG”,该怎么办您应该创建一个以c1为参数并返回信号列表的方法。然后你可以用“GT”来调用这个方法,然后再用“ATG”来调用。请你再帮我一点,我知道我的要求可能太高了,但我真的是一个编程新手,不擅长自我教育。谢谢AnshulGarg,但这并不能解决我的问题。在我对《罗布麻》的评论中,我做了更多的解释。
@Override
public String toString(){
return "(" + signal + "," + pos + ")";
}