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

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

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

回答

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

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()

输入:10

user input as a Double 10.0 
user input as an Int 10

输入:0.1

user input as a Double 0.1 
user input as an Int 0 

对于输入:“单词”

Not a number


回答

该方法上面提到的将一个工作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)}")
}

例子:

100234
isNumber: true
isInteger: true

235.22
isNumber: true
isInteger: false

102948012120948129049012849102841209849018
isNumber: true
isInteger: true

a
isNumber: false
isInteger: false

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

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

  • So as a general rule, don't mention "above" in an answer; answer order changes when your answer is accepted or upvoted 😉

以上是Kotlin:检查字符串是否为数字的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>