import java.io.InputStream;\r
import java.util.Iterator;\r
import java.util.Scanner;\r
+import java.util.regex.MatchResult;\r
+\r
+import javax.vecmath.MismatchedSizeException;\r
\r
import compbio.util.Util;\r
\r
public class FastaReader implements Iterator<FastaSequence> {\r
\r
private final Scanner input;\r
-\r
+ /**\r
+ * Delimiter for the scanner\r
+ */\r
+ private final String DELIM=">";\r
/**\r
* Header data can contain non-ASCII symbols and read in UTF8\r
* \r
*/\r
public FastaReader(final String inputFile) throws FileNotFoundException {\r
input = new Scanner(new File(inputFile), "UTF8");\r
- input.useDelimiter("\\s*>");\r
+ input.useDelimiter(DELIM);\r
Runtime.getRuntime().addShutdownHook(new Thread() {\r
\r
@Override\r
public FastaReader(final InputStream inputStream)\r
throws FileNotFoundException {\r
input = new Scanner(inputStream);\r
- input.useDelimiter("\\s*>");\r
+ input.useDelimiter(DELIM);\r
}\r
/**\r
* {@inheritDoc}\r
* if the header or the sequence is missing\r
* @throws IllegalStateException\r
* if the close method was called on this instance\r
+ * @throws MismatchException - if there were no more FastaSequence's.\r
*/\r
@Override\r
public FastaSequence next() {\r
- return FastaReader.toFastaSequence(input.next());\r
+ String fastaHeader=input.next();\r
+ while (fastaHeader.indexOf("\n")<0 && input.hasNext())\r
+ {\r
+ fastaHeader = fastaHeader.concat(">");\r
+ fastaHeader = fastaHeader.concat(input.next());\r
+ }\r
+ return FastaReader.toFastaSequence(fastaHeader);\r
}\r
\r
/**\r
static FastaSequence s3 = new FastaSequence(" 12 d t y wi k jbke ",\r
" KLSHHDCD" + " N" + " H" + " HSKCTEPHCGNSHQML\n\rHRDP"\r
+ " CCDQCQSWEAENWCASMRKAILF");\r
+ static FastaSequence s4 = new FastaSequence(" 12 d t>y wi->foo k jbke ",\r
+ " KLSHHDCD" + " N" + " H" + " HSKCTEPHCGNSHQML\n\rHRDP"\r
+ + " CCDQCQSWEAENWCASMRKAILF");\r
@Test()\r
public void test() {\r
\r
Assert.assertEquals(FastaReaderTester.s1, list.get(1));\r
Assert.assertEquals(FastaReaderTester.s2, list.get(2));\r
Assert.assertEquals(FastaReaderTester.s3, list.get(3));\r
+ Assert.assertEquals(FastaReaderTester.s4, list.get(4));\r
\r
}\r
}\r