1. 概述
在 Java 中,不同数据类型与 String
的相互转换分散在多个类中,方式各异。而 Scala 则将大部分与字符串相关的转换方法统一实现在 StringOps
类中,使用起来更方便。
本篇文章将带你了解 如何在 Scala 中进行常见数据类型与 String
之间的相互转换。
2. 环境依赖
本文示例使用的是 Scala REPL 2.13.0。
3. 数值类型转换
数值类型如 Int
、Long
、Double
、Float
与 String
的转换方式非常相似,都依赖于 StringOps
提供的方法。我们逐个来看。
3.1. Int
类型转换
将 Int
转为 String
使用 toString
方法:
scala> val i: Int = 42
i: Int = 42
scala> i.toString
res0: String = 42
将 String
转为 Int
有两种方式:
- 使用
toInt
方法:
scala> "42".toInt
res0: Int = 42
⚠️ 如果字符串格式不正确,会抛出 NumberFormatException
:
scala> "42a".toInt
java.lang.NumberFormatException: For input string: "42a"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at scala.collection.StringOps$.toInt$extension(StringOps.scala:889)
... 28 elided
- 使用
toIntOption
方法(推荐):
✅ 安全,不会抛异常,返回 Option[Int]
:
scala> "42".toIntOption
res1: Option[Int] = Some(42)
scala> "42a".toIntOption
res2: Option[Int] = None
3.2. Long
类型转换
与 Int
类似:
scala> val l: Long = 42
l: Long = 42
scala> l.toString
res0: String = 42
scala> "42".toLong
res1: Long = 42
scala> "42".toLongOption
res3: Option[Long] = Some(42)
❌ "42a".toLong
也会抛 NumberFormatException
。
3.3. Double
类型转换
同样使用 toString
、toDouble
和 toDoubleOption
:
scala> val d: Double = 42
d: Double = 42.0
scala> d.toString
res0: String = 42.0
scala> "42".toDouble
res1: Double = 42.0
scala> "42".toDoubleOption
res2: Option[Double] = Some(42.0)
❌ "42a".toDouble
同样会抛异常。
3.4. Float
类型转换
scala> val f: Float = 42
f: Float = 42.0
scala> f.toString
res0: String = 42.0
scala> "42".toFloat
res1: Float = 42.0
scala> "42".toFloatOption
res2: Option[Float] = Some(42.0)
4. String
转 Boolean
String
转 Boolean
是大小写不敏感的:
scala> val b: Boolean = true
b: Boolean = true
scala> b.toString
res0: String = true
scala> "true".toBoolean
res1: Boolean = true
scala> "true".toBooleanOption
res2: Option[Boolean] = Some(true)
scala> "true-x".toBoolean
java.lang.IllegalArgumentException: For input string: "true-x"
at scala.collection.StringOps$.toBooleanImpl$extension(StringOps.scala:943)
at scala.collection.StringOps$.toBoolean$extension(StringOps.scala)
... 28 elided
scala> "true-x".toBooleanOption
res3: Option[Boolean] = None
scala> "TrUe".toBoolean
res4: Boolean = true
5. String
转 CharArray
使用 toCharArray
方法:
scala> "string".toCharArray
res0: Array[Char] = Array(s, t, r, i, n, g)
将 CharArray
转回 String
,使用 mkString
方法:
scala> Array('a','b','c').mkString
res0: String = abc
6. String
转 ByteArray
与前面不同,String
与 ByteArray
的转换需要借助 getBytes
方法:
scala> "baeldung".getBytes
res0: Array[Byte] = Array(98, 97, 101, 108, 100, 117, 110, 103)
反向操作需要先将 Byte
转为 Char
,再使用 mkString
:
scala> (res0.map(_.toChar)).mkString
res1: String = baeldung
7. 总结
本文介绍了 Scala 中常见数据类型与 String
之间的转换方式,包括数值类型、布尔值、字符数组和字节数组。其中推荐使用 toXxxOption
方法避免运行时异常,提高代码健壮性。