Scala 匹配 findAllin 在 if 子句中不起作用

Scala matching findAllin does not work in if clause

我想从字符串中找到一个数字的索引,然后取字符直到数字。这是我的做法

val r = "[0-9]".r
val strName="dkgngw3#ujhg"

  if  (strName.exists(_.isDigit)) {
    val mi = r.findAllIn(strName)
    val strNameTrim=strName.substring(0, mi.start)
  }

如果我 运行 就这两行就可以了。

val mi = r.findAllIn(strName)
val strNameTrim=strName.substring(0, mi.start)

它 returns 错误如果 运行 if 子句中的整个事情。我怎样才能正确地做到这一点?

java.lang.IllegalStateException: No match available
  at java.util.regex.Matcher.start(Matcher.java:343)
  at scala.util.matching.Regex$MatchIterator.start(Regex.scala:761)

如果你需要找到第一个数字的索引,你可以使用这样的东西:

strName.zipWithIndex.collectFirst { case (ch, i) if ch.isDigit => i }

问题不是很清楚,不过我觉得你就是想要

strName.takeWhile(!_.isDigit)

这将 return 名称中第一个数字之前的所有字符。如果没有数字,结果将与原始字符串相同。