从String Array中提取数字

时间:2016-11-07 07:18:33

标签: regex scala scala-collections

我有一个字符串数组

scala> tokens
res34: Array[String] = Array(The, value, of, your, profile, is, 234.2., You, have, potential, to, gain, 8.3, more.)

这里每个逗号分隔值都是一个字符串 我想从中提取数字,即我的输出应该是 result =(234.2,8.3)&它应该是可变的,以便我可以从另一个数组中读取并附加值

我应该使用什么数据结构来实现这一目标?

4 个答案:

答案 0 :(得分:4)

考虑

value

我们将每个数组字符串进一步标记为 words 并用点附加它们(这应该去除例如尾随点);我们会尽可能将生成的令牌转换为双打(注意import scala.util._ tokens.flatMap(s => Try( s.split("\\W+").mkString(".").toDouble ).toOption) Try会为失败的转化提供toOption。使用None,我们只会成功转换。

答案 1 :(得分:2)

只需使用正则表达式过滤数组

val numericRegex: String = "\\d+\\.\\d+"
tokens filter(_.matches(numericRegex))

请注意,第6个值 232.2。 不是数字。你必须删除最后一个点“。”所以它将是 232.2

如果值包含空格而不是必须修剪它们

tokens map (_.trim) filter (_.matches(numericRegex))
res28: Array[String] = Array(234.2, 8.3)

答案 2 :(得分:1)

使用Regex,您可以使用此代码来捕获所有数字:

\d+\.?\d+

演示:https://regex101.com/r/pZomjn/1

答案 3 :(得分:1)

在Scala中,有一个句法糖来组成mapfilter,称为for comprehension。以下是基于for

的正则表达式方法
val regex = ".*\\d+\\.?\\d+.*"
val nums = for {
    str <- tokens if str.matches(regex)
    numStr = str.trim.split("\\W+").mkString(".")
} yield numStr.toDouble

它提供了所需的输出:

nums: Array[Double] = Array(234.2, 8.3)