有没有一种简单的方法来检查用户的输入是否为数字?在这里使用正则表达式和异常似乎太复杂了。
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)
text.isDigitsOnly()只需在kotlin中使用 : 。
加入所有有用的评论并将其放入输入流上下文中,您可以使用以下示例:
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)
该方法上面提到的将一个工作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)跳过第一个字符的条件。
| 归档时间: |
|
| 查看次数: |
1830 次 |
| 最近记录: |