1
>1A3B:H|PDBID|CHAIN|SEQUENCE
IVEGSDAEIGMSPWQVMLFRKSPQELLCGASLISDRWVLTAAHCLLYPPWDKNFTENDLLVRIGKHSRTRYERNIEKISM
LEKIYIHPRYNWRENLDRDIALMKLKKPVAFSDYIHPVCLPDRETAASLLQAGYKGRVTGWGNLKETWTANVGKGQPSVL
QVVNLPIVERPVCKDSTRIRITDNMFCAGYKPDEGKRGDACEGDSGGPFVMKSPFNNRWYQMGIVSWGEGCDRDGKYGFY
THVFRLKKWIQKVIDQFGE
>1A3B:I|PDBID|CHAIN|SEQUENCE
GGQSHNDGDFEEIPEEYL
>1A3B:L|PDBID|CHAIN|SEQUENCE
TFGSGEADCGLRPLFEKKSLEDKTERELLESYIDGR

这是存储在文本文件中的数据。我如何去严格地提取数据之间

  ">1A3B:I|PDBID|CHAIN|SEQUENCE" and ">1A3B:L|PDBID|CHAIN|SEQUENCE", 

当只有

">1A3B:I|PDBID|CHAIN|SEQUENCE" 

我们都知道。

此外,在这个给定的示例中,虽然要检索的数据只有一行,但它也可以变化到多行。到目前为止,我尝试将文件的全部内容写入字符串变量并使用子字符串,但由于最终索引未知,该逻辑似乎存在缺陷。请帮忙

导入java.io.*;公共类 ReadingChainSpecificFastaSequence {

    public static void main(String[] args) {


            File file = new File("1A3B.fasta.txt");
            BufferedInputStream bin = null;

            try
            {

                    FileInputStream fin = new FileInputStream(file);


                    bin = new BufferedInputStream(fin);


                    byte[] contents = new byte[1024];

                    int bytesRead=0;
                    String strFileContents=null;

                    while( (bytesRead = bin.read(contents)) != -1){

                            strFileContents = new String(contents, 0, bytesRead);

                    }
                   // System.out.print(strFileContents); 
                    String search = ">1A3B:I|PDBID|CHAIN|SEQUENCE";
                    int start = (strFileContents.indexOf(search))+30;
                    String search2= ">1A3B:L|PDBID|CHAIN|SEQUENCE";
                    int end= (strFileContents.indexOf(search2));
                   String result = strFileContents.substring(start,end);

            }
            catch(FileNotFoundException e)
            {
                    System.out.println("File not found" + e);
            }
            catch(IOException ioe)
            {
                    System.out.println("Exception while reading the file "+ ioe);
            }
            finally
            {

                    try{
                            if(bin != null)
                                    bin.close();
                    }catch(IOException ioe)
                    {
                            System.out.println("Error while closing thestream:"+ioe);
                    }

            }
    }
    }
4

2 回答 2

0

将您的问题分解为更小、更易于定义的步骤。

您知道您的文件有一个文件结尾,并且您知道您的文件使用 > 符号来定义文本部分的开头。

  • 将文件读入字符串。
  • 查找第一个 > 的索引。
  • 查找下一行分隔符的索引。
  • 解释节标题。
  • 查找下一个 > 或文件结尾的索引
  • 在行分隔符和索引之间保存数据。
  • 从下一行分隔符步骤的查找索引开始重复,直到文件结尾。
于 2013-01-22T18:06:04.207 回答
0

您似乎想阅读每一行输入,并且:

  1. 如果\存在于该行中,则在该字符上拆分它
  2. 查看拆分字符串的第一个元素并在 处将其拆分:以找到当前标记,将第一部分 ( 1A3B) 保存到一个变量,将第二部分保存到另一个变量
  3. 从这个“开始”标记,确定您要查找的下一个标记是:获取第一部分并将第二部分后面的字母添加到它(形成1A3B:L)。
  4. 继续阅读每一行新的输入,将这些行存储在某种列表或数组中,直到一行以结束标记 ( 1A3B:L) 开始。
于 2013-01-22T18:04:07.890 回答