如何使用scala拆分字符串?

时间:2014-09-20 10:11:03

标签: string scala split

我有一个跟随字符串,我想使用scala

拆分它
"myInfo": "myName-name;model-R210;"

我想分割myInfo字符串的值,以便我可以单独访问myName及其值。 例如myName:名称,型号:R210等

我正在使用以下代码来拆分字符串 -

(mainString \ "myInfo").as[String].split("\\;").toList.map(_.split("\\-"))

其中mainString是Json并包含'myInfo'键值对。

如何拆分字符串以“ - ”分隔并访问它?

2 个答案:

答案 0 :(得分:4)

您可以像这样获得Map[String,String]

val data: Map[String,String] = (mainString \ "myInfo").as[String]
    .split("\\;").map(_.split("\\-").toList)
    .collect { 
      case key :: value :: _ => key -> value
    }.toMap

然后访问您的值:

val name = data.getOrElse("myName", "DefaultNameIfMissing")

答案 1 :(得分:0)

首先,对于将​​复杂数据结构编码为JSON文档中的字符串的人来说,感到羞耻;你根本不需要解析它。如果它在您的控制之下,我会将其更改为

"myInfo": {
  "myName": "name",
  "model": "R210"
}

但如果您无法更改输入,那么只需执行此操作即可获得所需的地图:

val myInfo = ((mainString \ "myInfo").as[String] split ';' map (_ split '-') collect { case Array(k,v) => k->v } ).toMap

无需从中间结果中创建列表 - 这只会减慢速度。然后拆分Char,而不是String(可以编译成正则表达式)。

请注意collect会导致任何没有连字符或多个连字符的组件被忽略;你可能想在那里做点什么。