# Kotlin 程序：检查字符串是否为数字

> 原文： [https://www.programiz.com/kotlin-programming/examples/check-string-numeric](https://www.programiz.com/kotlin-programming/examples/check-string-numeric)

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

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

```kt
import java.lang.Double.parseDouble

fun main(args: Array<String>) {

    val string = "12345s15"
    var numeric = true

    try {
        val num = parseDouble(string)
    } catch (e: NumberFormatException) {
        numeric = false
    }

    if (numeric)
        println("$string is a number")
    else
        println("$string is not a number")
}
```

运行该程序时，输出为：

```kt
12345s15 is not a number
```

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

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

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

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

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

* * *

## 示例 2：使用正则表达式（regex）检查字符串是否为数字

```kt
fun main(args: Array<String>) {

    val string = "-1234.15"
    var numeric = true

    numeric = string.matches("-?\\d+(\\.\\d+)?".toRegex())

    if (numeric)
        println("$string is a number")
    else
        println("$string is not a number")
}
```

When you run the program, the output will be:

```kt
-1234.15 is a number
```

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

在`matches()`方法中，

*   `-?`允许零或多个`-`用于字符串中的负数。
*   `\\d+`检查字符串必须至少包含一个或多个数字（`\\d`）。
*   `(\\.\\d+)?`允许零个或多个给定模式`(\\.\\d+)`，其中
    *   `\\.`检查字符串是否包含`.`（小数点）
    *   如果是，则应至少跟一个或多个数字`\\d+`。

以下是等效的 Java 代码：[检查字符串是否为数字的 Java 程序](/java-programming/examples/check-string-numeric "Java program to check if a string is numeric or not")。