2009-09-12 22 views
5

Supongamos que mi archivo de entrada contiene:¿Cómo leo la entrada formateada en Java?

3 4 5 6 7  8 
9 


10 

Quiero ejecutar un bucle while y leer números enteros, por lo que voy a obtener 3,4,5,6,7,8 y 10, respectivamente, después de cada iteración del lazo.

Esto es realmente fácil de hacer en C/C++, pero no en Java ...

yo probamos este código:

try { 
      DataInputStream out2 = new DataInputStream(new BufferedInputStream(new FileInputStream(file))); 

      int i=out2.read(); 
      while(i!=-1){ 
       System.out.println(i); 
       i=out2.readInt(); 
      } 

    } catch (IOException ex) { 

    } 

y lo que consigo es:

51 
540287029 
540418080 
538982176 
151599117 
171511050 
218762506 
825232650 

¿Cómo leo los números enteros de este archivo en Java?

+1

FYI: DataInputStream es para la lectura binaria, no texto. –

+0

Entonces, ¿la solución de Java resultó ser más fácil que C++ o más difícil? –

+0

para mí, leer entradas en C es aún más fácil, especialmente cuando el archivo contiene todo tipo de datos: números, cadenas, carrozas, etc. – Lazer

Respuesta

15

Se puede utilizar la clase Scanner y su método nextInt:

Scanner s = new Scanner("3 4  5 6"); 

while (s.hasNext()) { 
    System.out.println(s.nextInt()); 
} 

Salida:

3 
4 
5 
6 

Básicamente por defecto, el objeto Scanner ignorará cualquier espacio en blanco, y obtendrá el siguiente token.

Scanner class as a constructor que toma un InputStream como fuente para la secuencia de caracteres, por lo que podría usarse un FileInputStream que abre el origen del texto.

Reemplazar la instanciación Scanner en el ejemplo anterior con la siguiente:

Scanner s = new Scanner(new FileInputStream(new File(filePath))); 
+0

¡muchas gracias! ¡funciona! – Lazer

Cuestiones relacionadas