如何在Scala中接受用户的输入?


76

我想接受用户的输入。您能告诉我如何在Scala中以字符串形式要求用户输入吗?


6
val input = readLine("prompt> ")
huynhjl

请参阅Scaladoc上的控制台
Daniel C. Sobral

不建议直接使用readLine()。而是在StdIn中导入一个:import scala.io.StdIn.readLine;
新编码器2015年

Answers:


121

在Scala 2.11中使用

scala.io.StdIn.readLine()

而不是已弃用的Console.readLine


21

Scala maling列表中(格式和链接已更新):

简短答案:

readInt

长答案:

如果要从终端读取,请签出Console.scala。您可以像这样使用这些功能:

Console.readInt

另外,为方便起见,会Predef.scala 自动定义一些功能的快捷方式Console。由于进来的东西Predef始终随处自动导入,因此您可以像这样使用它们:

readInt

26
我认为即使在其他地方也可以提出这样的要求...邮件列表格式不是最容易阅读的格式。
huynhjl

6
@huynhjl实际上,创建Stack Overflow的原因之一是因为它很烂地搜索邮件列表。
Daniel C. Sobral

4
@huynhjl,我同意。我们中的某些人(我)通过Google获得了此答案。
Leif Andersen

@Daniel为什么这样?
EBE艾萨克

@ÉbeIsaac,您可以在此处进行检查scala-lang.org/api/current/scala/Console$.html
Rodrigo

16

这是读取整数值的标准方法

val a=scala.io.StdIn.readInt()
println("The value of a is "+ a)

类似地

def readBoolean():布尔值从stdin的整行中读取一个布尔值。

def readByte():Byte从整行的stdin中读取Byte值。

def readChar():Char从整行的stdin读取Char值。

def readDouble():Double从整行的stdin中读取Double值。

def readFloat():Float从整行从stdin读取Float值。

def readInt():Int从整行的stdin中读取一个Int值。

def readLine(text:String,args:Any *):String将格式化的文本打印到stdout并从stdin读取整行。

def readLine():String从stdin读取整行。

def readLong():Long从整行的stdin中读取Long值。

def readShort():Short从stdin的整行中读取Short值。

def readf(format:String):List [Any]按照格式说明符的指定从stdin读取结构化输入。

def readf1(format:String):根据格式说明符,从stdin中读取任何结构化输入,如格式说明符所指定,仅返回提取的第一个值。

def readf2(format:String):(Any,Any)按照格式说明符从stdin读取结构化输入,根据格式说明仅返回提取的前两个值。

def readf3(format:String):(Any,Any,Any)按照格式说明符从stdin读取结构化输入,根据格式说明仅返回提取的前三个值。

同样,如果您想从同一行中读取多个用户输入,例如:姓名,年龄,体重,则可以使用Scanner对象

import java.util.Scanner

// simulated input
val input = "Joe 33 200.0"
val line = new Scanner(input)
val name = line.next
val age = line.nextInt
val weight = line.nextDouble

摘自Scala Cookbook:Alvin Alexander的面向对象和函数式编程食谱


8
object InputTest extends App{

    println("Type something : ")
    val input = scala.io.StdIn.readLine()
    println("Did you type this ? " + input)

}

这样您可以要求输入。

scala.io.StdIn.readLine()

6

您可以使用readLine()获取用户String输入。

import scala.io.StdIn._

object q1 {
  def main(args:Array[String]):Unit={  
    println("Enter your name : ")
    val a = readLine()
    println("My name is : "+a)
  }
}

或者,您可以使用扫描仪类接受用户输入。

import java.util.Scanner;

object q1 {
  def main(args:Array[String]):Unit={ 
      val scanner = new Scanner(System.in)
    println("Enter your name : ")
    val a = scanner.nextLine()
    println("My name is : "+a)
  }
}

1
“无法解析符号readLine”我是否缺少某种导入?
DFSFOT

1

readLine使您可以提示用户并以String形式读取其输入

val name = readLine("What's your name? ")

1

从用户读取输入的简单示例

val scanner = new java.util.Scanner(System.in)

scala> println("What is your name") What is your name

scala> val name = scanner.nextLine()
name: String = VIRAJ

scala> println(s"My Name is $name")
My Name is VIRAJ

我们也可以使用读线

val name = readLine("What is your name ")
What is your name name: String = Viraj

1

Scala 2中

import java.io._
object Test {
    // Read user input, output
    def main(args: Array[String]) {

        // create a file writer
        var writer = new PrintWriter(new File("output.txt"))

       // read an int from standard input
       print("Enter the number of lines to read in: ")
       val x: Int = scala.io.StdIn.readLine.toInt

       // read in x number of lines from standard input
       var i=0
       while (i < x) {
           var str: String = scala.io.StdIn.readLine
           writer.write(str + "\n")
           i = i + 1
       }

       // close the writer
       writer.close
     }
}

此代码从用户获取并输出:

[input] Enter the number of lines to read in: 2
one
two

[output] output.txt
one
two

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.