1. 概述

在 Java 中,不同数据类型与 String 的相互转换分散在多个类中,方式各异。而 Scala 则将大部分与字符串相关的转换方法统一实现在 StringOps 类中,使用起来更方便。

本篇文章将带你了解 如何在 Scala 中进行常见数据类型与 String 之间的相互转换

2. 环境依赖

本文示例使用的是 Scala REPL 2.13.0

3. 数值类型转换

数值类型如 IntLongDoubleFloatString 的转换方式非常相似,都依赖于 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 类型转换

同样使用 toStringtoDoubletoDoubleOption

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. StringBoolean

StringBoolean 是大小写不敏感的:

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. StringCharArray

使用 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. StringByteArray

与前面不同,StringByteArray 的转换需要借助 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 方法避免运行时异常,提高代码健壮性。


原始标题:Create a Java and Kotlin Project with Maven

» 下一篇: Kotlin 反射详解