1. 概要

Java変換メソッドはさまざまなクラスと戦略に分散していますが、StringからScalaデータ型への変換のほとんどはStringOpsクラスで実装されています。

このチュートリアルでは、いくつかのScalaデータ型をStringとの間で変換する方法について説明します。

2. 依存関係

このチュートリアルでは、コード例として Scala REPL2.13.0を使用します。

3. 数値変換

String と、 Int Long Double Float などの数値タイプ間の変換は類似しているため、 StringOps クラスを使用します。このクラスは、4つのタイプに相当するメソッドを提供します。 みてみましょう。

3.1. Intコンバージョン

最初に確認するデータ型はIntです。

IntからStringへの変換は、toStringメソッドを使用して処理されます。

scala> val i: Int = 42
i: Int = 42

scala> i.toString
res0: String = 42

StringIntの間で変換するには、2つのオプションがあります。 まず、toIntメソッドを使用できます。

scala> "42".toInt 
res0: Int = 42

toInt メソッドは、数値形式が正しくない場合にExceptionをスローします。

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メソッドで、値が有効な場合は Some [Int] を返し、正しくない場合はNoneを返します。数値形式:

scala> "42".toIntOption
res1: Option[Int] = Some(42)

scala> "42a".toIntOption
res2: Option[Int] = None

3.2. 長いコンバージョン

前に述べたように、StringLongの間の変換は、前のセクションの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 を実行しようとすると、 Int の場合と同じように、NumberFormatExceptionを受け取ります。

3.3. ダブルコンバージョン

ここでも、同じ方法が Double:に適用されます。

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 を実行すると、前の例と同じようにNumberFormatExceptionがスローされます。

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に変換しています

次に、CharArrayデータ型を見てみましょう。 StringCharArrayに変換するには、StringOpsメソッドに再度依存します。

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の間の変換は、前の例ほど簡単ではありません。

StringからByteArrayを作成するには、StringOpsからgetBytesメソッドを使用します。

scala> "baeldung".getBytes 
res0: Array[Byte] = Array(98, 97, 101, 108, 100, 117, 110, 103)

ただし、逆の操作を処理するには、ByteCharを中間変換してから、CharArrayに変換する必要があります。

scala> (res0.map(_.toChar)).mkString
res1: String = baeldung

7. 結論

この記事では、いくつかのScalaデータ型と文字列表現の間で変換する方法について説明しました。