数字の桁数が他の数字と等しいかどうかを確認する必要があります。私が思いついた最良の方法はこれでした:
require(Number.toString == """\d{8}""", throw new InvalidDateFormatException("Wrong format for string parameter"))
必要な桁数は 8 です。より良い方法はありますか?
1 つの選択肢:
require(Number.toString.length == 8, throw new InvalidDateFormatException("Wrong format for string parameter"))
別の (学術的な) アプローチは、桁数を数えることです。
def digits(num: Int) = {
@scala.annotation.tailrec
def run(num: Int, digits: Int): Int =
if(num > 0) run(num / 10, digits + 1)
else digits
run(math.abs(num), 0)
}
たとえば、暗黙的な変換を使用して、digits
既存の数値型にメソッドを追加できます。
これは行き過ぎであり、時期尚早の最適化である可能性が高いことは容易に認めます。
別の選択肢は
require(Number > 9999999 && Number < 100000000,throw new InvalidDateFormatException("Wrong format for string parameter"))