You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:24:02