Qual é a receita do Scala para ler linha por linha da entrada padrão? Algo como o 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());
}
}
}
java
scala
io
java.util.scanner
Andrei Ciobanu
fonte
fonte
scala.io.StdIn
Para o console, você pode usar
Console.readLine
. Você pode escrever (se quiser parar em uma linha vazia):Se você catar um arquivo para gerar a entrada, pode ser necessário parar em nulo ou vazio usando:
fonte
takeWhile(_ != null)
Console.readLine
está obsoleto, use em seuStdIn.readline
lugar..takeWhile(Option(_).nonEmpty)
pode se sentir melhor caso queira evitarnull
completamente a palavra - chave.fonte
io.Source.stdin
é definido (nascala.io.Source
aula),def stdin = fromInputStream(System.in)
então provavelmente é melhor continuar com oio.Source.stdin
.collect
método é alterado após essa resposta, então você só precisa chamar oinput.getLines
que lhe dá umIterator
. Você pode forçá-lo a se materializar usando.toStream
ou.toList
sobre ele, depende do caso de uso.Uma versão recursiva (o compilador detecta uma recursão final para melhorar o uso de heap),
Observe o uso de
io.StdIn
Scala 2.11. Observe também que, com essa abordagem, podemos acumular a entrada do usuário em uma coleção que é eventualmente retornada - além de ser impressa. Nomeadamente,fonte
Você não pode usar
Conforme disponível aqui: API Scaladoc
fonte
Conforme observado brevemente em outros comentários,
scala.Predef.readLine()
está obsoleto desde Scala 2.11.0 e você pode substituí-lo porscala.io.StdIn.readLine()
:fonte