sirve scanner que para nextline nextdouble java java.util.scanner readline

que - scanner java string



Línea de lectura con escáner (5)

Este código lee el archivo línea por línea.

public static void readFileByLine(String fileName) { try { File file = new File(fileName); Scanner scanner = new Scanner(file); while (scanner.hasNext()) { System.out.println(scanner.next()); } scanner.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } }

También puede establecer un delimitador como separador de línea y luego realizar el mismo.

scanner.useDelimiter(System.getProperty("line.separator"));

Debe comprobar si hay un siguiente token disponible y luego leer el siguiente token. También deberá volver a verificar la entrada dada al escáner. es decir, dico.txt. De forma predeterminada, el escáner interrumpe su entrada en función del espacio en blanco. Por favor, asegúrese de que la entrada tiene los delimitadores en el lugar correcto

RESPUESTA ACTUALIZADA para su comentario:

Acabo de intentar crear un archivo de entrada con el contenido como se muestra a continuación

a à abaissa abaissable abaissables abaissai abaissaient abaissais abaissait

Intenté leerlo con el siguiente código. Simplemente funcionó bien.

File file = new File("/home/keerthivasan/Desktop/input.txt"); Scanner scr = null; try { scr = new Scanner(file); while(scr.hasNext()){ System.out.println("line : "+scr.next()); } } catch (FileNotFoundException ex) { Logger.getLogger(ScannerTest.class.getName()).log(Level.SEVERE, null, ex); }

Salida:

line : a line : à line : abaissa line : abaissable line : abaissables line : abaissai line : abaissaient line : abaissais line : abaissait

Entonces, estoy seguro de que esto debería funcionar. Como trabaja en el entorno de Windows, la secuencia de fin de línea (EOL) (0x0D 0x0A, / r / n) es en realidad dos caracteres ASCII, una combinación de los caracteres CR y LF. Si configura su instancia de Scanner para utilizar el delimitador de la siguiente manera, probablemente se recuperará

scr = new Scanner(file); scr.useDelimiter("/r/n");

y luego hacer su bucle para leer líneas. ¡Espero que esto ayude!

EDITAR para otros lectores: el problema era que mi archivo de entrada estaba dañado.

No entiendo lo que estoy haciendo mal:

Estaba usando este código:

File f = new File("C://Temp//dico.txt"); BufferedReader r = null; try { r = new BufferedReader(new FileReader(f)); String scan; while((scan=r.readLine())!=null) { if(scan.length()==0) {continue;} //treatment } } catch (FileNotFoundException ex) { Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex); } finally { if(r!=null) try { r.close(); } catch (IOException ex) { Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex); } }

Que está funcionando bien. Ahora, por alguna razón, quería cambiar por un escáner. Mi código se convirtió en:

File f = new File("C://Temp//dico.txt"); Scanner r = null; try { r = new Scanner(f); String scan; while(r.hasNextLine()) { scan = r.nextLine(); if(scan.length()==0) {continue;} //treatment } } catch (FileNotFoundException ex) { Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex); } finally { if(r!=null) r.close(); }

Esta vez, nunca ingresamos el while, porque r.hasNextLine () siempre devuelve "false". ¿Alguna idea de lo que estoy haciendo mal?

Preciso que nada más ha cambiado, el archivo sigue siendo el mismo.

EDITAR : También precisé que probé con otro archivo y obtuve el mismo resultado, lo que significa que no proviene del archivo aparentemente.

El archivo se ve así:

a à abaissa abaissable abaissables abaissai abaissaient abaissais abaissait ...

Edición 2: el contenido del archivo parece ser problemático, ya que el problema persiste solo si copio / pego el contenido de mi archivo a otro. Claramente, si escribo el contenido yo mismo, funciona, si uso una parte del contenido de mi archivo dico.txt, no funciona. Alguna explicacion

Edición 3: Estos son los enlaces a mis archivos. Te aconsejo que evites el dico.txt que es muy grande.

dico.txt: https://drive.google.com/file/d/0B0sroFy9HZlBNDl3MUwzVnh6VU0/edit?usp=sharing

test.txt: https://drive.google.com/file/d/0B0sroFy9HZlBemZjbXU1RmlmdjQ/edit?usp=sharing


Intente usar r.hasNext () en lugar de r.hasNextLine () :

while(r.hasNext()) { scan = r.next();


Los métodos next () y nextLine () están asociados con Scanner y se usan para obtener entradas de String. Sus diferencias son ...

next () puede leer la entrada solo hasta el espacio. No puede leer dos palabras separadas por espacio. Además, a continuación () coloca el cursor en la misma línea después de leer la entrada.

nextLine () lee la entrada que incluye el espacio entre las palabras (es decir, lee hasta el final de la línea / n). Una vez que se lee la entrada, nextLine () coloca el cursor en la siguiente línea.

Leer artículo: Diferencia entre next () y nextLine ()

Reemplace su bucle while con:

while(r.hasNext()) { scan = r.next(); System.out.println(scan); if(scan.length()==0) {continue;} //treatment }

El uso de los hasNext() y next() resolverá el problema.


Para todos los que aún no pueden leer un archivo .txt simple con el escáner Java.

Tuve el problema de que el escáner no podía leer en la siguiente línea, cuando copié y pegué la información, o cuando había mucho texto en mi archivo.

La solución es: Codificar su archivo .txt en UTF-8.
Esto se puede hacer bastante simple guardando la apertura del archivo nuevamente y cambiando la codificación a UTF-8. (Bajo Win7 cerca de la esquina inferior derecha)

El escáner no debería tener ningún problema después de esto.


/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaapplication1; import java.io.File; import java.util.Scanner; /** * * @author zsagga */ class openFile { private Scanner x ; int count = 0 ; String path = "C://Users//zsagga//Documents//NetBeansProjects//JavaApplication1//src//javaapplication1//Readthis.txt"; public void openFile() { // System.out.println("I''m Here"); try { x = new Scanner(new File(path)); } catch (Exception e) { System.out.println("Could not find a file"); } } public void readFile() { while (x.hasNextLine()){ count ++ ; x.nextLine(); } System.out.println(count); } public void closeFile() { x.close(); } } /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaapplication1; /** * * @author zsagga */ public class JavaApplication1 { public static void main(String[] args) { // TODO code application logic here openFile r = new openFile(); r.openFile(); r.readFile(); r.closeFile(); } }