|
Scala example source code file (StdIn.scala)
The StdIn.scala Scala example source codepackage scala package io import java.text.MessageFormat /** private[scala] because this is not functionality we should be providing * in the standard library, at least not in this idiosyncractic form. * Factored into trait because it is better code structure regardless. */ private[scala] trait StdIn { import scala.Console._ /** Read a full line from the default input. Returns `null` if the end of the * input stream has been reached. * * @return the string read from the terminal or null if the end of stream was reached. */ def readLine(): String = in.readLine() /** Print and flush formatted text to the default output, and read a full line from the default input. * Returns `null` if the end of the input stream has been reached. * * @param text the format of the text to print out, as in `printf`. * @param args the parameters used to instantiate the format, as in `printf`. * @return the string read from the default input */ def readLine(text: String, args: Any*): String = { printf(text, args: _*) out.flush() readLine() } /** Reads a boolean value from an entire line of the default input. * Has a fairly liberal interpretation of the input. * * @return the boolean value read, or false if it couldn't be converted to a boolean * @throws java.io.EOFException if the end of the input stream has been reached. */ def readBoolean(): Boolean = { val s = readLine() if (s == null) throw new java.io.EOFException("Console has reached end of input") else s.toLowerCase() match { case "true" => true case "t" => true case "yes" => true case "y" => true case _ => false } } /** Reads a byte value from an entire line of the default input. * * @return the Byte that was read * @throws java.io.EOFException if the end of the * input stream has been reached. * @throws java.lang.NumberFormatException if the value couldn't be converted to a Byte */ def readByte(): Byte = { val s = readLine() if (s == null) throw new java.io.EOFException("Console has reached end of input") else s.toByte } /** Reads a short value from an entire line of the default input. * * @return the short that was read * @throws java.io.EOFException if the end of the * input stream has been reached. * @throws java.lang.NumberFormatException if the value couldn't be converted to a Short */ def readShort(): Short = { val s = readLine() if (s == null) throw new java.io.EOFException("Console has reached end of input") else s.toShort } /** Reads a char value from an entire line of the default input. * * @return the Char that was read * @throws java.io.EOFException if the end of the * input stream has been reached. * @throws java.lang.StringIndexOutOfBoundsException if the line read from default input was empty */ def readChar(): Char = { val s = readLine() if (s == null) throw new java.io.EOFException("Console has reached end of input") else s charAt 0 } /** Reads an int value from an entire line of the default input. * * @return the Int that was read * @throws java.io.EOFException if the end of the * input stream has been reached. * @throws java.lang.NumberFormatException if the value couldn't be converted to an Int */ def readInt(): Int = { val s = readLine() if (s == null) throw new java.io.EOFException("Console has reached end of input") else s.toInt } /** Reads an long value from an entire line of the default input. * * @return the Long that was read * @throws java.io.EOFException if the end of the * input stream has been reached. * @throws java.lang.NumberFormatException if the value couldn't be converted to a Long */ def readLong(): Long = { val s = readLine() if (s == null) throw new java.io.EOFException("Console has reached end of input") else s.toLong } /** Reads a float value from an entire line of the default input. * @return the Float that was read. * @throws java.io.EOFException if the end of the * input stream has been reached. * @throws java.lang.NumberFormatException if the value couldn't be converted to a Float * */ def readFloat(): Float = { val s = readLine() if (s == null) throw new java.io.EOFException("Console has reached end of input") else s.toFloat } /** Reads a double value from an entire line of the default input. * * @return the Double that was read. * @throws java.io.EOFException if the end of the * input stream has been reached. * @throws java.lang.NumberFormatException if the value couldn't be converted to a Float */ def readDouble(): Double = { val s = readLine() if (s == null) throw new java.io.EOFException("Console has reached end of input") else s.toDouble } /** Reads in some structured input (from the default input), specified by * a format specifier. See class `java.text.MessageFormat` for details of * the format specification. * * @param format the format of the input. * @return a list of all extracted values. * @throws java.io.EOFException if the end of the input stream has been * reached. */ def readf(format: String): List[Any] = { val s = readLine() if (s == null) throw new java.io.EOFException("Console has reached end of input") else textComponents(new MessageFormat(format).parse(s)) } /** Reads in some structured input (from the default input), specified by * a format specifier, returning only the first value extracted, according * to the format specification. * * @param format format string, as accepted by `readf`. * @return The first value that was extracted from the input */ def readf1(format: String): Any = readf(format).head /** Reads in some structured input (from the default input), specified * by a format specifier, returning only the first two values extracted, * according to the format specification. * * @param format format string, as accepted by `readf`. * @return A [[scala.Tuple2]] containing the first two values extracted */ def readf2(format: String): (Any, Any) = { val res = readf(format) (res.head, res.tail.head) } /** Reads in some structured input (from the default input), specified * by a format specifier, returning only the first three values extracted, * according to the format specification. * * @param format format string, as accepted by `readf`. * @return A [[scala.Tuple3]] containing the first three values extracted */ def readf3(format: String): (Any, Any, Any) = { val res = readf(format) (res.head, res.tail.head, res.tail.tail.head) } private def textComponents(a: Array[AnyRef]): List[Any] = { var i: Int = a.length - 1 var res: List[Any] = Nil while (i >= 0) { res = (a(i) match { case x: java.lang.Boolean => x.booleanValue() case x: java.lang.Byte => x.byteValue() case x: java.lang.Short => x.shortValue() case x: java.lang.Character => x.charValue() case x: java.lang.Integer => x.intValue() case x: java.lang.Long => x.longValue() case x: java.lang.Float => x.floatValue() case x: java.lang.Double => x.doubleValue() case x => x }) :: res i -= 1 } res } } object StdIn extends StdIn Other Scala source code examplesHere is a short list of links related to this Scala StdIn.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.