输入/输出(IO)
Scala终端输出与Java中类似,使用print()/println()
函数。
Scala中终端输入需要导入包scala.io.StdIn
。
格式化输出
使用print()/println()
可以打印String
类型的文本输出。
复杂文本可以使用类似Java的字符串拼接方式(使用操作符+
)。
在Scala中,字符串依然使用Java中标准的String
类型,但通过隐式转换特性,String
可以被自动构造为StringLike
类型。
StringLike
类型提供了一系列方便强大的字符操作方法,格式化字符串可以使用其提供的format()
方法,如下所示:
scala> "Test format str:\nString %s\nInt %d\nFloat %f\n".format("Hello World!", 666, 666.666)
res0: String =
"Test format str:
String Hello World!
Int 666
Float 666.666
"
终端输入
早期的Scala中Console
类提供了一系列的终端输入方法,在现在的版本中这些方法已经被废弃。
- 当前版本的Scala获取终端输入需要使用包
scala.io.StdIn
中的相关方法。 scala.io.StdIn
中的相关方法签名与先前的Console
类中完全相同。- 使用
readLine()
获取单行文本输入,返回String
类型。 - 使用
readInt()/readFloat()/readChar()/readLong()...
等方法获取特定类型的输出,当输入的内容不匹配时,会抛出异常。 - 使用
readf()/readf1()/readf2()/readf3()
等方法能以java.text.MessageFormat
语法格式化接收的终端输入。
如下代码所示:
scala> val str = scala.io.StdIn.readLine() //自行脑补终端输入"Test input"
str: String = Test input
scala> val int = scala.io.StdIn.readInt() //自行脑补终端输入"200"
int: Int = 200
//输入内容不匹配读取类型时会抛出异常
scala> val double = scala.io.StdIn.readDouble()
java.lang.NumberFormatException: For input string: "test"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at scala.collection.immutable.StringLike$class.toDouble(StringLike.scala:284)
at scala.collection.immutable.StringOps.toDouble(StringOps.scala:30)
at scala.io.StdIn$class.readDouble(StdIn.scala:155)
at scala.io.StdIn$.readDouble(StdIn.scala:229)
... 33 elided
//readf()可以接收任意数量的值,返回值为List[Any]类型
scala> val list = scala.io.StdIn.readf("{0} + {1}") //自行脑补终端输入"Test + Input"
list: List[Any] = List(Test, Input) //按照格式化字符串提取出了输入内容
scala> list foreach { println }
Test
Input
//readf1()仅能接收一个值,返回接收的值
scala> val num = scala.io.StdIn.readf1("This is {0}") //自行脑补终端输入"This is 666"
num: Any = 666
//readf2()/readf3()接收两个/三个值,返回值为Tuple类型
scala> val tuple = scala.io.StdIn.readf3("{0} + {1} + {2}") //自行脑补终端输入"One + Two + Three"
tuple: (Any, Any, Any) = (On,Two,Three)
##枚举(Enumerate)
在Scala中,没有语言级别的枚举类型,枚举的功能可以通过继承枚举类Enumeration
实现。
###继承枚举类
继承枚举类Enumeration
可以在成员中使用无参方法Value
给每个枚举成员赋值。
默认的Value方法会按变量名生成枚举名和并从0开始生成枚举ID,若需要手动设定枚举的名称喝枚举ID则可以使用Value方法的重载Value(id: Int, name: Strig)
。
如下代码所示:
object Color extends Enumeration {
var red, green, blue = Value
/*
* 相当于分别初始化:
* var red = Value
* var green = Value
* var blue = Value
*/
//手动使用Value(id: Int, name: String)方法手动进行id和name的设置
var white = Value(100, "White")
var black = Value(200, "Black")
//使用重载有參版本的Value(id: Int, name: String)不能采用自动赋值的方式,会编译报错
}
object TestEnumeration extends App {
println(Color.red.toString + ":" + Color.red.id + " " + Color.green + ":"
+ Color.green.id + " " + Color.blue + ":" + Color.blue.id)
println(Color.white + ":" + Color.white.id + " " + Color.black + ":" + Color.black.id)
}
输出结果:
red:0 green:1 blue:2
White:100 Black:200