Quelle est la recette Scala pour lire ligne par ligne à partir de l'entrée standard? Quelque chose comme le code java équivalent:
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
la source
la source
scala.io.StdIn
Pour la console, vous pouvez utiliser
Console.readLine
. Vous pouvez écrire (si vous voulez vous arrêter sur une ligne vide):Si vous créez un fichier pour générer l'entrée, vous devrez peut-être vous arrêter sur null ou vide en utilisant:
la source
takeWhile(_ != null)
Console.readLine
est obsolète, utilisez à laStdIn.readline
place..takeWhile(Option(_).nonEmpty)
vous vous sentirez peut-être mieux au cas où vous voudriez éviternull
complètement le mot - clé.la source
io.Source.stdin
est défini (enscala.io.Source
classe) comme il estdef stdin = fromInputStream(System.in)
donc probablement préférable de s'en tenir auio.Source.stdin
.collect
méthode soit modifiée sicne cette réponse donc vous devez simplement appelerinput.getLines
ce qui vous donne unIterator
. Vous pouvez le forcer à se matérialiser en utilisant.toStream
ou.toList
dessus, selon le cas d'utilisation.Une version récursive (le compilateur détecte une récursivité de queue pour une meilleure utilisation du tas),
Notez l'utilisation de
io.StdIn
de Scala 2.11. Notez également qu'avec cette approche, nous pouvons accumuler les entrées utilisateur dans une collection qui est finalement retournée - en plus d'être imprimée. À savoir,la source
Ne peux-tu pas utiliser
Disponible ici: API Scaladoc
la source
Comme indiqué brièvement dans d'autres commentaires,
scala.Predef.readLine()
est obsolète depuis Scala 2.11.0, et vous pouvez le remplacer parscala.io.StdIn.readLine()
:la source