我有一个这样的源文件:
replace 1 3 xyz
reverse 0 2
print 1 4
我想使用Array:
逐行分配这些元素val Array(action, start, end, sub) = src.next.split(“ “)
正如您所看到的,第4个元素是可选的,我不知道如何管理这种不一致。有没有办法让最后一个作业可选?
答案 0 :(得分:3)
val Array(action, start, end, x @ _*) = src.next.split(" ")
这会将action, start, end
与前3个元素匹配,将x
与Seq[String]
匹配。然后,您可以使用x.headOption
将第4个元素作为Option
。
如果超过4,则它们都将包含在x
val line = "replace 1 3 xyz"
val Array(action, start, end, x @ _*) = line.split(" ")
// action: String = replace
// start: String = 1
// end: String = 3
// x: Seq[String] = Vector(xyz)
答案 1 :(得分:2)
有很多不同的方法可以解决这个问题。这是一个简洁但却将所有内容都变成Option
的内容。
val line = "reverse 0 2".split(" ")
val Seq(action, start, end, sub) = 0.to(3).map(line.lift)
//action: Option[String] = Some(reverse)
//start: Option[String] = Some(0)
//end: Option[String] = Some(2)
//sub: Option[String] = None
如果您只想将第4个作为Option
,那么您必须将其作为单独的作业。
val Array(action, start, end) = line.take(3)
val sub = line.lift(3)