从字符串数组中提取数字
Extract numbers from String Array
我有一个字符串数组
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) & 它应该是可变的,这样我就可以从另一个数组中读取并附加值
我应该使用什么数据结构来实现这个?
考虑
import scala.util._
tokens.flatMap(s => Try( s.split("\W+").mkString(".").toDouble ).toOption)
我们将每个数组字符串进一步标记为 words 并用一个点附加它们(这应该去除例如尾随点);我们尽可能将生成的标记转换为双精度(注意 Try
toOption
将为失败的转换提供 None
)。 flatMap
我们只保留成功的转换。
使用正则表达式,您可以使用此代码来捕获所有数字:
\d+\.?\d+
使用正则表达式简单地过滤你的数组
val numericRegex: String = "\d+\.\d+"
tokens filter(_.matches(numericRegex))
请注意,第 6 个值 232.2. 不是数字。您必须删除最后一个点“。”所以它将是 232.2
如果值包含空格,则您必须 trim 它们
tokens map (_.trim) filter (_.matches(numericRegex))
res28: Array[String] = Array(234.2, 8.3)
在 Scala 中,有一个语法糖来组合 map
和 filter
,称为 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)
我有一个字符串数组
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) & 它应该是可变的,这样我就可以从另一个数组中读取并附加值
我应该使用什么数据结构来实现这个?
考虑
import scala.util._
tokens.flatMap(s => Try( s.split("\W+").mkString(".").toDouble ).toOption)
我们将每个数组字符串进一步标记为 words 并用一个点附加它们(这应该去除例如尾随点);我们尽可能将生成的标记转换为双精度(注意 Try
toOption
将为失败的转换提供 None
)。 flatMap
我们只保留成功的转换。
使用正则表达式,您可以使用此代码来捕获所有数字:
\d+\.?\d+
使用正则表达式简单地过滤你的数组
val numericRegex: String = "\d+\.\d+"
tokens filter(_.matches(numericRegex))
请注意,第 6 个值 232.2. 不是数字。您必须删除最后一个点“。”所以它将是 232.2
如果值包含空格,则您必须 trim 它们
tokens map (_.trim) filter (_.matches(numericRegex))
res28: Array[String] = Array(234.2, 8.3)
在 Scala 中,有一个语法糖来组合 map
和 filter
,称为 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)