आप उपयोग कर सकते हैं regex और पैटर्न मिलान में:
scala> val R = "consumer_key=(.*), consumer_secret=(.*)".r
R: scala.util.matching.Regex = consumer_key=(.*), consumer_secret=(.*)
scala> "consumer_key=1234ABC, consumer_secret=12345ABC" match {
| case R(k, v) => Auth(k, v)
| }
res0: Auth = Auth(1234ABC,12345ABC)
और अधिक लचीला पार्सिंग के लिए
उपयोग JavaTokenParsers
:
import scala.util.parsing.combinator._
case class Auth(consumerKey: String, consumerSecret: Option[String])
class AuthParser extends JavaTokenParsers {
def auth: Parser[Auth] = key ~ opt("," ~> secret) ^^ { case k ~ s => Auth(k, s)}
def key: Parser[String] = value("consumer_key")
def secret: Parser[String] = value("consumer_secret")
def value(k: String): Parser[String] = k ~ "=" ~> "[^,]*".r
def apply(s: String) = parseAll(auth, s)
}
उपयोग:
scala> val p = new AuthParser
p: AuthParser = [email protected]
scala> p("consumer_key=1234ABC, consumer_secret=12345ABC").get
res0: Auth = Auth(1234ABC,Some(12345ABC))
scala> p("consumer_key=1234ABC").get
res1: Auth = Auth(1234ABC,None)
क्या आपके सभी तारों में यह संरचना है? यदि हां, तो आप इसे स्पष्ट रूप से क्यों नहीं तोड़ते? 'वैल (कुंजी, गुप्त) = (s.slice (" consumer_key = "लंबाई, s.indexOf (", ")), s.drop (s.lastIndexOf (" = ")))' –
नहीं, मैंने अभी पोस्ट किया है पहले दो लेकिन वहां और भी हैं। –