Programación Java: la lectura de una línea a la vez

En este código listado Java, el payOneEmployee método ilustra algunos trucos útiles para la lectura de datos. En particular, cada escáner que se crea tiene un nextLine método. (Es posible que no utilice este nextLine método, pero el método está disponible, no obstante.)

Cuando se llama a un escáner de nextLine método, el método de toma todo hasta el final de la línea actual de texto. En este establecimiento, una llamada a nextLine puede leer toda una línea de la EmployeeInfo.txt archivo. (En otro programa, un escáner de nextLine llamada puede leer todo lo que el usuario escribe en el teclado hasta el prensado de la tecla Intro.)

importación java.util.Scanner-importación java.io.File-importación clase java.io.IOException pública DoPayroll {principales (String args []) void estáticos públicos throws IOException {Scanner diskScanner = new Scanner (new File ("EmployeeInfo. txt ")) - for (int empnum = 1- empnum lt; = 3- empnum ++) {payOneEmployee (diskScanner) -} diskScanner.close () -} payOneEmployee (aScanner Scanner static void) {Empleado anEmployee = new Employee()-anEmployee.setName(aScanner.nextLine())-anEmployee.setJobTitle(aScanner.nextLine())-anEmployee.cutCheck(aScanner.nextDouble())-aScanner.nextLine()-}}

Note la cuidadosa elección de las palabras: nextLine lee todo hasta el final de la línea actual. Por desgracia, lo que significa leer hasta el final de la línea actual no siempre es lo que usted piensa que significa. Entremezclándose nextInt, nextDouble, y nextLine las llamadas pueden ser un poco incómodo. Tienes que ver lo que estás haciendo y comprobar la salida de su programa de cuidado.

Para entender todo esto, tiene que ser dolorosamente consciente de los saltos de línea de un archivo de datos. Piense en un salto de línea como un carácter adicional, atrapado entre una línea de texto y el siguiente. Luego imagina ese llamado nextLine significa leer todo hasta e incluyendo el siguiente salto de línea.

Ahora echa un vistazo a esta cifra.

imagen0.jpg
  • Si una llamada a nextLine lee Barry Burd [LineBreak], la posterior llamada a nextLine lee CEO [LineBreak].

  • Si una llamada a nextDouble lee el número 5000.00, la posterior llamada a nextLine lee el [LineBreak] que viene inmediatamente después del número 5000.00. (Eso es toda la nextLine lee - una [LineBreak] y nada mas.)

  • Si una llamada a nextLine lee el [LineBreak] después del número 5000.00, la posterior llamada a nextLine lee Harriet Ritter [LineBreak].

Así que después de leer el número 5000.00, necesita de dos llamadas a nextLine con el fin de recoger el nombre Harriet Ritter. El error que se suele hacer es olvidarse de la primera de esas dos llamadas.

Mira de nuevo en el archivo de la figura. Para el código de esta sección para que funcione correctamente, debe tener un salto de línea después de la última 10.000,00. Si no lo hace, una llamada final a nextLine hace estrellarse su programa y grabar. El mensaje de error lee NoSuchElementException: No se encontró la línea.

Usted puede ser sorprendido por el número de peculiaridades que se encuentran en los métodos de exploración de cada lenguaje de programación. Por ejemplo, el primero nextLine que lee desde el archivo en los devora figura Barry Burd [LineBreak] desde el archivo.

Pero eso nextLine llamada de entrega Barry Burd (sin ningún salto de línea) al código de ejecución. Así nextLine busca un salto de línea, y luego nextLine pierde el salto de línea. Sí, este es un punto sutil. Y no, este punto sutil casi nunca causa problemas a nadie.

Si este asunto de nextDouble y nextLine que confunde, por favor no echar la culpa a Java. Mezcla de llamadas de entrada es delicado trabajo en cualquier lenguaje de programación. Y lo realmente desagradable es que cada lenguaje de programación se acerca al problema un poco diferente.

¿Qué te enteraste nextLine en Java ayuda a entender los problemas cuando se llega a saber C ++ o Visual Basic, pero no le dices a todos los detalles. Detalles de cada idioma son únicos para ese idioma.




» » » » Programación Java: la lectura de una línea a la vez