Scala学习笔记(4) --輸入/輸出

本文介绍了Scala中的输入输出操作,包括格式化输出和终端输入,并详细讲解了如何在Scala中进行终端输入。同时,文章还探讨了Scala的枚举实现,通过继承枚举类来创建枚举并展示了如何为枚举成员赋值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

输入/输出(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值