Kotlin:检查字符串是否为数字

ant*_*kev 6 kotlin

有没有一种简单的方法来检查用户的输入是否为数字?在这里使用正则表达式和异常似乎太复杂了。

fun main {
    val scan = Scanner(System.`in`)
    val input = scanner.nextLine()
    if (!input.isNumeric) {
        println("You should enter a number!")
    }
}
Run Code Online (Sandbox Code Playgroud)

Ima*_*shi 7

text.isDigitsOnly()只需在kotlin中使用 : 。

  • 这不适用于 Float/Double:`"1.123".isDigitsOnly() == false` (2认同)

Ben*_*uel 6

加入所有有用的评论并将其放入输入流上下文中,您可以使用以下示例:

fun readLn() = readLine()!!
fun readNumericOnly() {
    println("Enter a number")
    readLn().toDoubleOrNull()?.let { userInputAsDouble ->
        println("user input as a Double $userInputAsDouble")
        println("user input as an Int ${userInputAsDouble.toInt()}")
    } ?: print("Not a number")


}
readNumericOnly()
Run Code Online (Sandbox Code Playgroud)

输入:10

user input as a Double 10.0 
user input as an Int 10
Run Code Online (Sandbox Code Playgroud)

输入:0.1

user input as a Double 0.1 
user input as an Int 0 
Run Code Online (Sandbox Code Playgroud)

对于输入:“单词”

Not a number
Run Code Online (Sandbox Code Playgroud)


Ani*_*ahu 6

该方法上面提到的将一个工作number <= approximately 4*10^18的本质最大限制Double

与其这样做,因为String它本身是一个 CharSequence,您可以检查所有字符是否属于特定范围。

val integerChars = '0'..'9'

fun isNumber(input: String): Boolean {
    var dotOccurred = 0
    return input.all { it in integerChars || it == '.' && dotOccurred++ < 1 }
}

fun isInteger(input: String) = input.all { it in integerChars }

fun main() {
    val input = readLine()!!
    println("isNumber: ${isNumber(input)}")
    println("isInteger: ${isInteger(input)}")
}
Run Code Online (Sandbox Code Playgroud)

例子:

100234
isNumber: true
isInteger: true

235.22
isNumber: true
isInteger: false

102948012120948129049012849102841209849018
isNumber: true
isInteger: true

a
isNumber: false
isInteger: false
Run Code Online (Sandbox Code Playgroud)

它也很高效,没有内存分配,只要发现任何不满足的条件就返回。

您还可以通过更改逻辑来包括检查负数,如果连字符是第一个字母,您可以应用subSequence(1, length)跳过第一个字符的条件。

  • 因此,作为一般规则,不要在答案中提及“以上”;当您的答案被接受或赞成时,答案顺序会发生变化;) (2认同)