Як отримати введення від користувача в Scala?


76

Я хочу взяти введення від користувача. Підкажіть, будь ласка, як запитувати введення даних користувача як рядок у Scala?


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

Див. Консоль на Scaladoc.
Daniel C. Sobral

Пряме використання readLine () застаріло. Натомість імпортуйте той, що вказаний у StdIn: import scala.io.StdIn.readLine;
New Coder

Відповіді:


121

У Scala 2.11 використання

scala.io.StdIn.readLine()

замість застарілих Console.readLine.


21

Зі списку сканування Scala (форматування та посилання були оновлені):

Коротка відповідь:

readInt

Довга відповідь:

Якщо ви хочете читати з терміналу, відвідайте Console.scala. Ви можете використовувати ці функції приблизно так:

Console.readInt

Крім того, для вашої зручності Predef.scala автоматично визначає деякі ярлики функцій у Console. Оскільки речі Predefзавжди і скрізь імпортуються автоматично, ви можете використовувати їх так:

readInt

26
Я думаю, це нормально запитувати SO, навіть якщо він існує деінде ... Формат списку розсилки не найпростіший для читання.
huynhjl

6
@huynhjl Дійсно, однією з причин створення переповнення стека є те, що це відмовно шукати списки розсилки.
Даніель К. Собрал,

4
@huynhjl, я згоден. Деякі з нас (я) дійшли до цієї відповіді через Google.
Лейф Андерсен

@Daniel Чому так?
Ébe Isaac

@ ÉbeIsaac ви можете перевірити тут scala-lang.org/api/current/scala/Console$.html
Родріго

16

Ось стандартний спосіб читання значень Integer

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

так само

def readBoolean (): Boolean Читає булеве значення з цілого рядка з stdin.

def readByte (): Байт Зчитує значення байта з цілого рядка з stdin.

def readChar (): Char Зчитує значення Char з цілого рядка з stdin.

def readDouble (): Double Зчитує значення Double з цілого рядка з stdin.

def readFloat (): Float Зчитує значення Float з цілого рядка зі stdin.

def readInt (): Int Зчитує значення Int з цілого рядка з stdin.

def readLine (текст: Рядок, аргументи: Будь-який *): Рядок Друкує відформатований текст до stdout і читає повний рядок із stdin.

def readLine (): String Читає повний рядок з stdin.

def readLong (): Long Читає значення Long із цілого рядка з stdin.

def readShort (): Short Зчитує коротке значення з цілого рядка з stdin.

def readf (формат: Рядок): Список [Будь-який] Читання в структурованому введенні з stdin, як зазначено специфікатором формату.

def readf1 (формат: String): Будь-яке зчитування в структурованому введенні з stdin, як вказано специфікатором формату, повертаючи лише перше витягнуте значення відповідно до специфікації формату.

def readf2 (формат: Рядок): (Будь-який, Будь-який) Читає в структурованому введенні з stdin, як вказано специфікатором формату, повертаючи лише перші два витягнуті значення відповідно до специфікації формату.

def readf3 (формат: Рядок): (Будь-який, Будь-який, Будь-який) Читає в структурованому введенні з 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: Рецепти об’єктно-орієнтованого та функціонального програмування Елвіна Александера


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 ().

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 дозволяє підказувати користувачеві та читати його введення як рядок

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

Також ми можемо використовувати Read Line

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.