Scalaでの文字列との間の変換
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
StringとIntの間で変換するには、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. 長いコンバージョン
前に述べたように、Stringと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 を実行しようとすると、 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. 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に変換しています
次に、CharArrayデータ型を見てみましょう。 StringをCharArrayに変換するには、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. StringをByteArrayに変換しています
StringとByteArrayの間の変換は、前の例ほど簡単ではありません。
StringからByteArrayを作成するには、StringOpsからgetBytesメソッドを使用します。
scala> "baeldung".getBytes
res0: Array[Byte] = Array(98, 97, 101, 108, 100, 117, 110, 103)
ただし、逆の操作を処理するには、ByteとCharを中間変換してから、CharArrayに変換する必要があります。
scala> (res0.map(_.toChar)).mkString
res1: String = baeldung
7. 結論
この記事では、いくつかのScalaデータ型と文字列表現の間で変換する方法について説明しました。