Предполагая, что струны все хорошо сформированы, регулярные выражения, расщепление и синтаксического анализа будет достаточно быстро. Вы не упомянули, если вы хотите сохранить структуру исходных данных (и типы усиления) или просто мешок кортежей, но либо достаточно легко:
val strings = Array("((210,(18,2015/06/28)),57.0)",
"((92,(60,2015/06/16)),102.89777479000209)",
"((46,(18,2015/06/17)),52.8940162267246)",
"((204,(27,2015/06/06)),75.2807019793683)")
val dateFormat = new java.text.SimpleDateFormat("yyyy/MM/dd")
def toUnstructuredTuple(s:String):(Int, Int, java.util.Date, Double) = {
val noParens = s.replaceAll("[\\(\\)]", "")
val split = noParens.split(",")
(split(0).toInt, split(1).toInt, dateFormat.parse(split(2)), split(3).toDouble)
}
def toStructedTuple(s:String):((Int,(Int, java.util.Date)), Double) = {
val noParens = s.replaceAll("[\\(\\)]", "")
val split = noParens.split(",")
((split(0).toInt, (split(1).toInt, dateFormat.parse(split(2)))), split(3).toDouble)
}
strings.foreach { s =>
println("%s -> %s".format(s, toUnstructuredTuple(s)))
}
strings.foreach { s =>
println("%s -> %s". format(s, toStructedTuple(s)))
}
Это приводит к:
benderino 21:54 $ bin/scala tuples.scala
((210,(18,2015/06/28)),57.0) -> (210,18,Sun Jun 28 00:00:00 PDT 2015,57.0)
((92,(60,2015/06/16)),102.89777479000209) -> (92,60,Tue Jun 16 00:00:00 PDT 2015,102.89777479000209)
((46,(18,2015/06/17)),52.8940162267246) -> (46,18,Wed Jun 17 00:00:00 PDT 2015,52.8940162267246)
((204,(27,2015/06/06)),75.2807019793683) -> (204,27,Sat Jun 06 00:00:00 PDT 2015,75.2807019793683)
((210,(18,2015/06/28)),57.0) -> ((210,(18,Sun Jun 28 00:00:00 PDT 2015)),57.0)
((92,(60,2015/06/16)),102.89777479000209) -> ((92,(60,Tue Jun 16 00:00:00 PDT 2015)),102.89777479000209)
((46,(18,2015/06/17)),52.8940162267246) -> ((46,(18,Wed Jun 17 00:00:00 PDT 2015)),52.8940162267246)
((204,(27,2015/06/06)),75.2807019793683) -> ((204,(27,Sat Jun 06 00:00:00 PDT 2015)),75.2807019793683)
Спасибо, хорошо выглядит. И еще более ориентированный на Скала ответ :) –