una txt texto separado programa por pipes para mostrar lineas linea leer especifica contenido como comas codigo archivo java scala io java.util.scanner

java - txt - ¿Cómo leer desde la entrada estándar línea por línea?



mostrar el contenido de un archivo txt en java (5)

¿Cuál es la receta de Scala para leer línea por línea de la entrada estándar? Algo así como el código Java equivalente:

import java.util.Scanner; public class ScannerTest { public static void main(String args[]) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ System.out.println(sc.nextLine()); } } }


El enfoque más sencillo simplemente usará readLine() que es parte de Predef . sin embargo, eso es bastante feo, ya que necesita verificar el posible valor nulo:

object ScannerTest { def main(args: Array[String]) { var ok = true while (ok) { val ln = readLine() ok = ln != null if (ok) println(ln) } } }

esto es muy detallado, preferiría usar java.util.Scanner lugar.

Creo que un enfoque más bonito usará scala.io.Source :

object ScannerTest { def main(args: Array[String]) { for (ln <- io.Source.stdin.getLines) println(ln) } }


No puedes usar

var userinput = readInt // for integers var userinput = readLine ...

Como está disponible aquí: Scaladoc API


Para la consola, puede usar Console.readLine . Puede escribir (si desea detenerse en una línea vacía):

Iterator.continually(Console.readLine).takeWhile(_.nonEmpty).foreach(line => println("read " + line))

Si adquiere un archivo para generar la entrada, puede que necesite detenerse en nulo o vacío usando:

@inline def defined(line: String) = { line != null && line.nonEmpty } Iterator.continually(Console.readLine).takeWhile(defined(_)).foreach(line => println("read " + line))


Una versión recursiva (el compilador detecta una recursividad de cola para un uso mejorado del montón),

def read: Unit = { val s = scala.io.StdIn.readLine() println(s) if (s.isEmpty) () else read }

Tenga en cuenta el uso de io.StdIn de Scala 2.11. También tenga en cuenta que con este enfoque podemos acumular la entrada del usuario en una colección que finalmente se devuelve, además de imprimirse. A saber,

import annotation.tailrec def read: Seq[String]= { @tailrec def reread(xs: Seq[String]): Seq[String] = { val s = StdIn.readLine() println(s) if (s.isEmpty()) xs else reread(s +: xs) } reread(Seq[String]()) }


val input = Source.fromInputStream(System.in); val lines = input.getLines.collect