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 名称中第一个数字之前的所有字符。如果没有数字,结果将与原始字符串相同。
我想从字符串中找到一个数字的索引,然后取字符直到数字。这是我的做法
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 名称中第一个数字之前的所有字符。如果没有数字,结果将与原始字符串相同。