将特定字符串转换为类对象的列表

时间:2015-10-06 07:28:36

标签: regex scala

如果我有case class Point(x: Double, y: Double)val s="(12,3.5),(33,42),(19.1,3)"。如何将s分割并转换成这样的东西?

Vector(Point(12,3.5),Point(33,42),Point(19.1,3))

(我想首先需要将s分成"(12,3.5)""(33,42)""(19.1,3)",但我不知道如何以干净的方式执行此操作。之后,一些scala正则表达式可以将每个元素映射到x类的yPoint ...)

2 个答案:

答案 0 :(得分:2)

我认为以下代码可能会对您有所帮助。

val s = "(12,3.5),(33,42),(19.1,3)"
val p = "[0-9.]+".r
val result = p.findAllIn(s).map(_.toDouble).grouped(2).map{case Seq(x, y) => Point(x, y)}.toVector

答案 1 :(得分:0)

要从字符串中提取元组,请考虑

val xs = """(\d+(\.\d*)?\,\d+(\.\d*)?)+""".r.findAllIn(s).toArray
Array(12,3.5, 33,42, 19.1,3)

构建点,

for (t <- xs; Array(x,y) = t.split(",")) 
yield Point(x.toDouble, y.toDouble)

提供

Array(Point(12.0,3.5), Point(33.0,42.0), Point(19.1,3.0))