1. 概要

このチュートリアルでは、Stringが数値であるかどうかを確認する一般的な方法をいくつか見ていきます。 まず、メソッドの解析と正規表現の使用について説明します。

最後に、正の整数のみを検出する別の方法を見ていきます。

2. DoubleまたはIntに解析する

文字列が数値であるかどうかを確認する1つの方法は、をDoubleまたはInt (または他の組み込み数値タイプ)として解析することです。 この解析の試みがnullを返さない場合、Stringは数値であると安全に想定できます。

fun isNumericToX(toCheck: String): Boolean {
    return toCheck.toDoubleOrNull() != null
}

このメソッドは、 Double と、 Int Floatなどのすべての数値タイプを処理できます。

assertTrue { isNumeric("11") }
assertTrue { isNumeric("-11") }
assertTrue { isNumeric("011") }
assertTrue { isNumeric("11.0F") }
assertTrue { isNumeric("11.0D") }
assertTrue { isNumeric("11.234") }
assertTrue { isNumeric("11.234e56") }
assertTrue { isNumeric("     123      ") }

この方法は非常に用途が広く、すべての数値タイプを処理できます。 ただし、他の数値タイプのチェックも実行できます。 これを行うには、toDoubleOrNullを他の変換方法に置き換えます。

  1. toIntOrNull()
  2. toLongOrNull()
  3. toFloatOrNull()
  4. toShortOrNull()
  5. toByteOrNull()

特に、Kotlinのすべての数値タイプでこれらの変換メソッドのそれぞれを呼び出すことができます。

3. 正規表現の使用

正規表現を使用して、文字列が数値であるかどうかを確認することもできます

fun isNumeric(toCheck: String): Boolean {
    val regex = "-?[0-9]+(\\.[0-9]+)?".toRegex()
    return toCheck.matches(regex)
}

ここでは、正規表現を使用して、Stringが数値であるかどうかを確認します。 正規表現は10進数に一致するように構成されています。

それを詳しく見てみましょう:

  • -? –番号の先頭にゼロまたは1つのマイナス(「-」)記号が付いているかどうかを確認します。
  • [0-9]文字列に1つ以上の数字があるかどうかを確認します。数字がない場合、これは失敗します。 特に、これは0、1、2、3、4、5、6、7、8、および9にのみ一致します。ただし、他のUnicode数字を検索する場合は、「\d」を使用できます。 「[0-9]」の代わりに「」。
  • (\\.[0-9]+)? –小数点(「。」)記号があるかどうかを確認します。 その場合は、その後に少なくとも1桁の数字を続ける必要があります。

4. isDigit()および all()の使用

String に数字のみが含まれているかどうかを確認する別の方法は、allメソッドとisDigitメソッドの組み合わせを使用することです

fun isNumeric(toCheck: String): Boolean {
    return toCheck.all { char -> char.isDigit() }
}

ここでは、Stringの各文字が数字かどうかを確認します。 all メソッドは、isDigitメソッドに渡されたときにすべての文字がtrueを返す場合、trueを返します。

これは、このメソッドが負の数または浮動小数点数に対して機能しないことも意味します。

5. 結論

文字列が数値であるかどうかを確認するさまざまな方法を検討しました。 まず、Kotlinが提供するさまざまな解析関数(toDoubleOrNull()、toIntOrNull()など)を使用しました。 この方法は最も用途が広く、ほとんどのユースケースをカバーしているようです。

後で、比較的少ないユースケースをカバーする他のオプションも検討しました。 これらのメソッドは、正規表現とKotlinファクトリ関数を使用して、数値Stringをチェックしました。

いつものように、コードサンプルはGitHubから入手できます。