Scala字符串仅含数字校验时空字符串判断异常问题求助
问题根因
问题本质是逻辑上的*空真(vacuous truth)*特性导致的:Scala中forall方法的语义是「集合中不存在不满足条件的元素」,空字符串属于空的字符集合,没有任何字符违反isDigit的判断,所以"".forall(_.isDigit)会返回true,才会误判为空字符串是全数字内容。
优化方案
只需要在isAllDigits的判断逻辑里加上「字符串非空」的前置校验即可,优化后的代码如下:
def checkDigits(nameOrId: String): Unit = { def isAllDigits(x: String) = x.nonEmpty && x.forall(_.isDigit) if (isAllDigits(nameOrId)) print("WITH_ID ") else print("WITH_NAME") }
如果业务上需要兼容输入是全空白字符(比如" ")也判定为非ID的场景,可以把nonEmpty替换为!x.isBlank,额外过滤掉全空白的情况。
内容的提问来源于stack exchange,提问作者Jelly
相关产品推荐
相关产品推荐

