Wie nehme ich Eingaben von einem Benutzer in Scala entgegen?


75

Ich möchte Eingaben vom Benutzer entgegennehmen. Können Sie mir bitte sagen, wie ich in Scala nach Benutzereingaben als Zeichenfolge fragen soll?


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

Siehe Konsole auf Scaladoc.
Daniel C. Sobral

Die direkte Verwendung von readLine () ist veraltet. Importieren Sie stattdessen die Datei in StdIn: import scala.io.StdIn.readLine;
New Coder

Antworten:


121

In Scala 2.11 verwenden

scala.io.StdIn.readLine()

anstelle der veralteten Console.readLine.


21

Aus der Scala-Maling-Liste (Formatierung und Links wurden aktualisiert):

Kurze Antwort:

readInt

Lange Antwort:

Wenn Sie vom Terminal lesen möchten, checken Sie aus Console.scala. Sie können diese Funktionen wie folgt verwenden:

Console.readInt

Definiert außerdem Predef.scala automatisch einige Verknüpfungen zu Funktionen in Console. Da Inhalte Predefimmer und überall automatisch importiert werden, können Sie sie folgendermaßen verwenden:

readInt

26
Ich denke, es ist in Ordnung, auf SO zu fragen, auch wenn es anderswo existiert ... Das Mailinglistenformat ist nicht das am einfachsten zu lesende.
Huynhjl

6
@huynhjl In der Tat ist einer der Gründe, warum Stack Overflow erstellt wurde, der, dass das Durchsuchen von Mailinglisten nicht funktioniert.
Daniel C. Sobral

4
@huynhjl, ich stimme zu. Einige von uns (ich) haben diese Antwort über Google erhalten.
Leif Andersen

@ Daniel Warum so?
Ébe Isaac

@ ÉbeIsaac können Sie es hier überprüfen scala-lang.org/api/current/scala/Console$.html
Rodrigo

15

Hier ist eine Standardmethode zum Lesen von Integer-Werten

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

ähnlich

def readBoolean (): Boolean Liest einen Booleschen Wert aus einer ganzen Zeile von stdin.

def readByte (): Byte Liest einen Bytewert aus einer ganzen Zeile von stdin.

def readChar (): Char Liest einen Char-Wert aus einer ganzen Zeile von stdin.

def readDouble (): Double Liest einen Double-Wert aus einer ganzen Zeile von stdin.

def readFloat (): Float Liest einen Float-Wert aus einer ganzen Zeile von stdin.

def readInt (): Int Liest einen Int-Wert aus einer ganzen Zeile von stdin.

def readLine (Text: String, Argumente: Beliebig *): String Druckt formatierten Text nach stdout und liest eine vollständige Zeile aus stdin.

def readLine (): String Liest eine vollständige Zeile von stdin.

def readLong (): Long Liest einen Long-Wert aus einer ganzen Zeile von stdin.

def readShort (): Short Liest einen Short-Wert aus einer ganzen Zeile von stdin.

def readf (Format: String): List [Any] Liest strukturierte Eingaben von stdin ein, wie vom Formatbezeichner angegeben.

def readf1 (format: String): Beliebig Liest strukturierte Eingaben von stdin ein, wie vom Formatbezeichner angegeben, und gibt nur den ersten extrahierten Wert gemäß der Formatspezifikation zurück.

def readf2 (format: String): (Any, Any) Liest strukturierte Eingaben von stdin ein, wie vom Formatbezeichner angegeben, und gibt nur die ersten beiden extrahierten Werte gemäß der Formatspezifikation zurück.

def readf3 (format: String): (Any, Any, Any) Liest strukturierte Eingaben von stdin ein, wie vom Formatbezeichner angegeben, und gibt nur die ersten drei extrahierten Werte gemäß der Formatspezifikation zurück.

Wenn Sie mehrere Benutzereingaben aus derselben Zeile lesen möchten, z. B. Name, Alter, Gewicht, können Sie das Scannerobjekt verwenden

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

Auszug aus dem Scala-Kochbuch: Rezepte für objektorientierte und funktionale Programmierung von Alvin Alexander


8
object InputTest extends App{

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

}

Auf diese Weise können Sie nach Eingaben fragen.

scala.io.StdIn.readLine()

6

Sie können eine Benutzereingabe mit readLine () eingeben.

import scala.io.StdIn._

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

Oder Sie können die Scannerklasse verwenden, um Benutzereingaben zu übernehmen.

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
"Symbol readLine kann nicht aufgelöst werden" Fehlt mir ein Import?
DFSFOT

1

Mit readLine können Sie den Benutzer auffordern und seine Eingabe als Zeichenfolge lesen

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

1

Einfaches Beispiel zum Lesen von Benutzereingaben

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

Wir können auch Read Line verwenden

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

1

In 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
     }
}

Dieser Code wird vom Benutzer eingegeben und ausgegeben:

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

[output] output.txt
one
two

-4

bitte versuche

scala> readint

Bitte versuchen Sie diese Methode


Erwägen Sie, eine Erklärung hinzuzufügen.
Sohaib
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.