原文: https://www.programiz.com/kotlin-programming/examples/check-string-numeric

在此程序中,您将学习不同的技术来检查 Kotlin 中的字符串是否为数字。

示例 1:检查字符串是否为数字

  1. import java.lang.Double.parseDouble
  2. fun main(args: Array<String>) {
  3. val string = "12345s15"
  4. var numeric = true
  5. try {
  6. val num = parseDouble(string)
  7. } catch (e: NumberFormatException) {
  8. numeric = false
  9. }
  10. if (numeric)
  11. println("$string is a number")
  12. else
  13. println("$string is not a number")
  14. }

运行该程序时,输出为:

  1. 12345s15 is not a number

在上面的程序中,我们有一个名为stringString,其中包含要检查的字符串。 我们还有一个布尔值num,它存储最终结果是否为数字。

要检查string是否仅包含数字,在try块中,我们使用DoubleparseDouble()方法将字符串转换为Double

如果抛出错误(即NumberFormatException错误),则表示string不是数字,并且num设置为false。 否则,这是一个数字。

但是,如果要检查是否有一定数量的字符串,则需要将其更改为函数。 而且,逻辑基于抛出异常,这可能会非常昂贵。

相反,我们可以使用正则表达式的功能来检查字符串是否为数字,如下所示。


示例 2:使用正则表达式(regex)检查字符串是否为数字

  1. fun main(args: Array<String>) {
  2. val string = "-1234.15"
  3. var numeric = true
  4. numeric = string.matches("-?\\d+(\\.\\d+)?".toRegex())
  5. if (numeric)
  6. println("$string is a number")
  7. else
  8. println("$string is not a number")
  9. }

运行该程序时,输出为:

  1. -1234.15 is a number

在上面的程序中,我们使用正则表达式来检查string是否为数字,而不是使用try-catch块。 这是使用Stringmatches()方法完成的。

matches()方法中,

  • -?允许零或多个-用于字符串中的负数。
  • \\d+检查字符串必须至少包含一个或多个数字(\\d)。
  • (\\.\\d+)?允许零个或多个给定模式(\\.\\d+),其中

    • \\.检查字符串是否包含.(小数点)
    • 如果是,则应至少跟一个或多个数字\\d+

以下是等效的 Java 代码:检查字符串是否为数字的 Java 程序