1. 概要

このチュートリアルでは、Scalaを使用して特定の文字列が数値であるかどうかを確認するためのいくつかの異なるソリューションを紹介します。

2. Character.isDigitを使用する

文字列が数値であるかどうかを確認するのは、思ったより難しいです。 小数部がないと確信している場合は、Char.isDigitメソッドを利用できます。

scala> val number = "123"
nuval number: String = 123

scala> number.forall(Character.isDigit)
val res0: Boolean = true

scala> val number = "0.5"
val number: String = 0.5

scala> number.forall(Character.isDigit)
val res1: Boolean = false

Char.isDigit メソッドは、文字が数字の場合、trueを返します。 残念ながら、このソリューションは小数部の数値には機能しません。セパレータによってメソッドがfalseを返すためです。

3. からDoubleへの変換の使用

より堅牢なソリューションは、String.toDoubleまたはString.toDoubleOptionメソッドを使用することです。 どちらもStringDoubleに変換しようとします。 前者はそれが不可能な場合に例外をスローしますが、後者は空のOptionを返します。

scala> val number = "123"
val number: String = 123

scala> number.toDouble
val res0: Double = 123.0

scala> number.toDoubleOption
val res1: Option[Double] = Some(123.0)

scala> val number = "0.5"
val number: String = 0.5

scala> number.toDouble
val res2: Double = 0.5

scala> number.toDoubleOption
val res3: Option[Double] = Some(0.5)

scala> val number = "123_random"
val number: String = 123_random

scala> number.toDouble
java.lang.NumberFormatException: For input string: "123_random"

scala> number.toDoubleOption
val res5: Option[Double] = None

ご覧のとおり、どちらも小数部のある数値とない数値で機能します。 数値が整数になることが確実な場合は、String.toIntおよびString.toIntOptionメソッドを使用できます。

4. 正規表現の使用

別の可能な解決策は、この問題に正規表現を使用することです。 通常はお勧めしませんが、機能する場合があります。 解析される数値には、小数部、数千の区切り文字が含まれる可能性があることを考慮に入れてください。 地球のさまざまな部分がさまざまな区切り文字を使用します(小数部分の前にコンマを使用するものもあれば、ドットを使用するものもあります)。

数値に数千の区切り記号がないと仮定すると、これでうまくいくはずです。

scala> val regex = "\\d+\\.?\\d+"
val regex: String = \d+\.?\d+,

scala> val number = "123"
val number: String = 123

scala> number.matches(regex)
val res0: Boolean = true

scala> val number = "0.5"
val number: String = 0.5

scala> number.matches(regex)
val res1: Boolean = true

scala> val number = "42_random"
val number: String = 42_random

scala> number.matches(regex)
val res2: Boolean = false

繰り返しになりますが、正規表現を使用する場合は注意が必要です。 通常の表現のサービス拒否の悪用により、多くのシステムが失敗しました。

5. 結論

この記事では、Scalaが提供するさまざまなツールを使用して、特定の文字列が数値であるかどうかを確認する方法を説明しました。