从标准输入中逐行读取的Scala秘诀是什么?类似于等价的java代码:
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());
}
}
}发布于 2011-01-03 23:43:32
最直接的方法就是使用Predef的一部分readLine()。然而,这是相当丑陋的,因为您需要检查最终的空值:
object ScannerTest {
def main(args: Array[String]) {
var ok = true
while (ok) {
val ln = readLine()
ok = ln != null
if (ok) println(ln)
}
}
}这太冗长了,您宁愿使用java.util.Scanner。
我认为一种更好的方法是使用scala.io.Source
object ScannerTest {
def main(args: Array[String]) {
for (ln <- io.Source.stdin.getLines) println(ln)
}
}发布于 2011-01-03 23:24:33
对于控制台,您可以使用Console.readLine。你可以写(如果你想停在一个空行上):
Iterator.continually(Console.readLine).takeWhile(_.nonEmpty).foreach(line => println("read " + line))如果您通过cat文件来生成输入,则可能需要使用以下命令在null或empty上停止:
@inline def defined(line: String) = {
line != null && line.nonEmpty
}
Iterator.continually(Console.readLine).takeWhile(defined(_)).foreach(line => println("read " + line))发布于 2011-01-03 23:37:08
val input = Source.fromInputStream(System.in);
val lines = input.getLines.collecthttps://stackoverflow.com/questions/4585655
复制相似问题