使用String的to*
方法可以讲字符串转换为Scala的数值类型,eg.
println("100".toInt)
println("100".toDouble)
println("100".toFloat)
println("100".toLong)
println("100".toShort)
输出如下:
100
100.0
100.0
100
100
需要注意的是,这些方法可能会抛出Java的NumberFormatException
,eg.
"eee".toInt
输出:
java.lang.NumberFormatException: For input string: "eee"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at scala.collection.immutable.StringLike.toInt(StringLike.scala:301)
at scala.collection.immutable.StringLike.toInt$(StringLike.scala:301)
at scala.collection.immutable.StringOps.toInt(StringOps.scala:29)
at com.yrz.spark.scala.cookbook.StringToVal$.main(StringToVal.scala:18)
at com.yrz.spark.scala.cookbook.StringToVal.main(StringToVal.scala)
BigInt和BigDecimal类型的数值也可以通过字符串创建,eg.
val a = BigInt("123")
val b = BigDecimal("123")
因为Scala的toInt
等字符串转成数值的方法不支持传入进制,可以使用java.lang.Integer
的parseInt
方法,eg.
println(Integer.parseInt("1111",2))
println(Integer.parseInt("11",8))
输出如下:
15
9
也可以用隐式转换,eg.
implicit class StringToInt(s : String) {
def toInt(radix : Int) = Integer.parseInt(s, radix)
}
println("11".toInt(2))
输出如下:
3
注意:隐式转换会影响当前作用域;