我想从字符串对象中提取有用的字段,如下所示
Request(Some(8454439),Some(16872692),Some(0.0.0.0),Some(8281008),Some(ArrayBuffer(845434399)),Some(129032),Some(3),Some(Profile),Some(en),None,None,None,None,Some(true),None,Some(Food),None,Some(Fish))
它总共有18个字段,我想要做的是将它们分配给18个不同的字符串并提取有用的信息(如果它是Some(X)
,否则将字符串设置为None
。
例如,在这种情况下,响应中的字符串数组应为
val results = Array("8454439", "16872692", "0.0.0.0", "8281008", "ArrayBuffer(845434399)",
"129032", "3", "Profile", "en", "None", "None", "None", "None", "true", "None",
"Food", "None", "Fish")
答案 0 :(得分:1)
如果你能以某种方式得到项目清单,你可以用Seq[Option[Any]]
做这样的事情:
val items: Seq[Option[Any]] = ???
items.map(_.getOrElse("None").toString)
但是如果你只有Request.toString
的输出,这将会让你大部分时间:
val s = "Request(Some(8454439),Some(16872692),Some(0.0.0.0),Some(8281008),Some(ArrayBuffer(845434399)),Some(129032),Some(3),Some(Profile),Some(en),None,None,None,None,Some(true),None,Some(Food),None,Some(Fish))"
val pat1 = """Some\([\w.()]+?\)|None""".r
val pat2 = """Some\((.*)\)""".r
pat1.findAllIn(s).map {
case pat2(some) => some
case x => x
}.toList
// res0: List[String] = List(8454439, 16872692, 0.0.0.0, 8281008, ArrayBuffer(845434399, 129032, 3, Profile, en, None, None, None, None, true, None, Food, None, Fish)
我的正则表达式不足以将尾随括号保留在ArrayBuffer
值上,但除此之外似乎有用。
答案 1 :(得分:0)
您是否尝试过
的内容val items = request.map {
case Some(value) => value
case None => "None"
}
要实际将Some(ArrayBuffer(845434399))转换为“ArrayBuffer(845434399)”,您可能需要嵌套匹配语句:
val items = request.map {
case Some(value) => value match {
case strng: String => strng
case other => ???
}
case None => "None"
}
离开我的头顶,不知道该怎么做才能做到,但也许任何一种类型的功能都会有所帮助。