Tengo un archivo de registro que contiene los siguientes datos nextLine() y hasNextLine():problema utilizando los métodos de escáner
ruta más corta (2) :: RV3280-RV0973C-RV2888C
ruta más corta (1): : RV3280-RV2502C
ruta más corta (2) :: RV3280-RV2501C-RV1263
ruta más corta (2) :: RV2363-Rv3285-RV3280
de cada línea, requiero el número dentro de los corchetes, el nombre de la primera proteína (RV3280 en la primera línea) y el nombre de la última proteína (RV2888C en la primera línea).
He escrito un código para esto usando el objeto Scanner
.
try{
Scanner s = new Scanner(new File(args[0]));
while (s.hasNextLine()) {
s.findInLine("Shortest path\\((\\d+)\\)::(\\w+).*-(\\w+)"); // at each line, look for this pattern
MatchResult result = s.match(); // results from
for (int i=1; i<=result.groupCount(); i++) {
System.out.println(result.group(i));
}
s.nextLine(); // line no. 29
}
s.close();
}
catch (FileNotFoundException e) {
System.out.print("cannot find file");
}
Obtengo los resultados deseados pero también recibo un mensaje de error. La salida que recibo para el archivo de entrada anterior es:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1516)
at nearnessindex.Main.main(Main.java:29)
2
RV3280
RV2888C
1
RV3280
RV2502C
2
RV3280
RV1263
2
RV2363
RV3280
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)
¿Por qué ocurre este error y cómo puedo corregirlo?
Hola clave, sí, funciona tan pronto como se agrega un separador de línea. No pensé en el movimiento de Scanner hasta el final de la línea :) Muchas gracias y gracias por la corrección también. – Harish