上述方法将对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)}")
}
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
6条答案
按热度按时间jjhzyzn01#
上述方法将对
number <= approximately 4*10^18
的基本最大极限Double
起作用。由于
String
本身就是一个CharSequence,因此您可以检查是否所有字符都属于一个特定的范围。示例:
它的效率也很高,没有内存分配和返回,只要发现任何不满足的条件。
您还可以通过更改逻辑来包括对负数的检查。如果连字符是第一个字母,则可以应用
subSequence(1, length)
的条件,跳过第一个字符。xqkwcwgp2#
加入所有有用的注解并将其放入输入流上下文中,您可以使用以下示例:
输入:10
对于输入:0.1
对于输入:“word”
6ie5vjzr3#
只需用途:在Kotlin的
text.isDigitsOnly()
。u7up0aaq4#
这里的所有答案都最适合自己的情况:但并非所有字符串都是数字,它可以有(-)和(.)十进制指针。
因此,为了实现这一点,我做了一个鸡尾酒的所有答案建议下面和其他职位以及-看起来像下面:
上面的代码很好地实现了它的目的。但是我突然想到Kotlin在匹配正则表达式方面做得更好,瞧,解决方案变得简单而优雅,如下所示:
此示例正则表达式仅适用于美国数字格式,但如果要使用欧盟数字格式,只需将“.”替换为“,”
如果数字包含逗号,那么在发送到这个方法时就替换它,或者更好地形成一个带有逗号的正则表达式模式。
nom7f22z5#
另一种检查给定字符串是否为数值(检查负值和正值)的方法:
vkc1a9a26#
一个没有任何自定义函数的简单答案是使用
toDoubleOrNull
函数。如果它返回null,则字符串不是数字。如果你知道输入只包含整数,你也可以同样使用
toIntOrNull