我想从用户那里获取输入。您能告诉我如何在Scala中请求用户输入字符串吗?
在Scala 2.11中使用
scala.io.StdIn.readLine()
使用已弃用的 Console.readLine
的替代方案。
这是读取整数值的标准方法
val a = scala.io.StdIn.readInt()
println("The value of a is " + a)
同样地
def readBoolean(): Boolean
从标准输入(stdin)读取整行数据并解析为布尔值。
def readByte(): Byte
从标准输入中读取一整行,并返回其中一个字节值。def readChar(): Char
从标准输入中读取一整行的字符值。
def readDouble(): Double
从标准输入流中读取一整行的Double值。
def readFloat(): Float
从标准输入中读取一整行的浮点数值。def readInt(): Int
从标准输入中读取一整行的Int类型值。
def readLine(text: String, args: Any*): String
将格式化的文本打印到标准输出并从标准输入读取一整行。
def readLine(): String
从标准输入中读取一整行。
def readLong(): Long
从标准输入(stdin)读取一整行的Long类型值。
def readShort(): Short
从标准输入中读取一整行的 Short 类型的值。def readf(format: String): List[Any]
根据格式说明符从标准输入(stdin)读取结构化的输入。
def readf1(format: String): Any
根据给定的格式说明符从标准输入中读取结构化输入,仅返回第一个提取的值,符合格式规范。
def readf2(format: String): (Any, Any)
根据格式说明符从标准输入流中读取结构化输入,根据格式规范仅返回提取的前两个值。
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
摘自Alvin Alexander的Scala Cookbook:面向对象和函数编程的实用技巧
以下是从Scala邮件列表获取的内容(已更新格式和链接):
简短回答:
readInt
长话短说:
如果你想从终端读取内容,请查看
Console.scala
。 你可以这样使用这些函数:另外,为了方便起见,Console.readInt
Predef.scala
自动定义了一些对Console
中函数的快捷方式。由于Predef
中的内容总是自动导入到任何地方,因此您可以像这样使用它们:readInt
object InputTest extends App{
println("Type something : ")
val input = scala.io.StdIn.readLine()
println("Did you type this ? " + input)
}
这样您就可以要求输入。
scala.io.StdIn.readLine()
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)
}
}
从用户读取输入的简单示例
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
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
readLine()
允许您提示用户并读取其输入作为字符串。
val name = readLine("What's your name? ")
Using a thread to poll the input-readLine:
// keystop1.sc
// In Scala- or SBT console/Quick-REPL: :load keystop1.sc
// As Script: scala -savecompiled keystop1.sc
@volatile var isRunning = true
@volatile var isPause = false
val tInput: Thread = new Thread {
override def run: Unit = {
var status = ""
while (isRunning) {
this.synchronized {
status = scala.io.StdIn.readLine()
status match {
case "s" => isRunning = false
case "p" => isPause = true
case "r" => isRunning = true;isPause = false
case _ => isRunning = false;isPause = false
}
println(s"New status is: $status")
}
}
}
}
tInput.start
var count = 0
var pauseCount = 0
while (isRunning && count < 10){
println(s"still running long lasting job! $count")
if (count % 3 == 0) println("(Please press [each + ENTER]: s to stop, p to pause, r to run again!)")
count += 1
Thread sleep(2000) // simulating heavy computation
while (isPause){
println(s"Taking a break ... $pauseCount")
Thread sleep(1000)
pauseCount += 1
if (pauseCount >= 10){
isPause = false
pauseCount = 0
println(s"Taking a break ... timeout occurred!")
}
}
}
isRunning = false
println(s"Computation stopped, please press Enter!")
tInput.join()
println(s"Ok, thank you, good bye!")
请尝试
scala> readint
请尝试使用这个方法
val input = readLine("prompt> ")
- huynhjl