我有一个简单的问题:
我想要一个值映射,它是解析文本的结果:
example.txt
Anna
James
Katy
因此,它应该是大地图 - 如下所示:
user_1 : Anna
user_2 : James
user_3 : Katy
我想使用 case 类将其与解析逻辑分开保存:
case class UserMap(userMap: Map[String, String])
所以,我开始解析它,我需要一些熟悉的东西:
(pseudo-scala)
def parseTxt: Parser[UserMap] = ".*".r ^^ {
case res => User(("user_1" -> res))
}
这里最好的方法是什么?在这种情况下如何使用地图?谢谢
如果你想使用Scala解析器组合器,那么这里有一个解决方案:
import scala.util.parsing.combinator.RegexParsers
object SO29918479 extends App {
case class UserMap(userMap: Map[String, String])
object UserParser extends RegexParsers {
def user: Parser[String] = """[a-zA-Z]+""".r
def users: Parser[List[String]] = (user ~ "n".?).* ^^ ( _.map(_._1))
def userMap: Parser[UserMap] = users ^^ { a =>
UserMap(a.zipWithIndex.map({case (user, index) => s"user_$index" -> user}).toMap)
}
}
println(UserParser.parse(UserParser.userMap, "AnnanJamesnKaty"))
}