2015-10-06 43 views
1

如果我有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的正則表達式的每個元素映射到xyPoint類...)

回答

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 
0

從字符串中提取的元組,考慮

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

要construc t時的點,

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)) 
+0

謝謝榆樹。我認爲這看起來更好,因爲我真的需要它檢查'('和')'的關閉。 –