首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >改进数组中检查元素为数字的代码

改进数组中检查元素为数字的代码
EN

Stack Overflow用户
提问于 2019-11-14 05:41:36
回答 2查看 73关注 0票数 1

我要检查字符串中的每个元素是否为数字。首先,我通过regexp [, ]+表达式将字符串拆分为数组,然后尝试通过forall和isDigit检查每个元素。

代码语言:javascript
复制
object Test extends App {
  val st = "1, 434, 634, 8"

  st.split("[ ,]+") match {
    case arr if !arr.forall(_.forall(_.isDigit)) => println("not an array")
    case arr if arr.isEmpty                      => println("bad delimiter")
    case _                                       => println("success")
  }
}

如何改进这段代码和!arr.forall(_.forall(_.isDigit))

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-14 08:04:36

使用需要字符串才能完全匹配模式的matches

代码语言:javascript
复制
st.matches("""\d+(?:\s*,\s*\d+)*""")

请参阅Scala演示regex演示

详细信息

  • 在三引号字符串文字中,不需要双转义反斜杠,因为反斜杠是regex转义的一部分。
  • 当模式与^一起使用时,锚( $.matches )是隐式的。
  • regex指的是1+数字,后面是0或更多的逗号重复,包含0或更多的空格,然后是1+数字。
票数 1
EN

Stack Overflow用户

发布于 2019-11-14 05:58:02

我认为它可以简化,同时也使它更加健壮。

代码语言:javascript
复制
val st = "1,434 , 634   , 8"  //a little messier but still valid

st.split(",").forall(" *\\d+ *".r.matches)  //res0: Boolean = true

我认为像"1,,,434 , 634 2 , "这样的字符串应该会失败。

正则表达式可以放在一个变量中,以便只编译一次。

代码语言:javascript
复制
val digits = " *\\d+ *".r
st.split(",").forall(digits.matches)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58850085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档