The*_*aul 1 string stack split scala scala-2.8
我有一个看起来像这样的字符串:
"7-6-4-1"
Run Code Online (Sandbox Code Playgroud)
要么
"7"
Run Code Online (Sandbox Code Playgroud)
要么
""
Run Code Online (Sandbox Code Playgroud)
也就是说,一组数字用 - 分隔.可能有零个或多个数字.
我想返回一个堆栈,其中按顺序按下数字(即第一个按7,第一个示例为1个)
如果我只是想返回一个列表,我可以去str.split("-").map{_.toInt}(虽然这对空字符串不起作用)/
虽然没有toStack转换为Stack.所以目前,我有
{
val s = new Stack[Int];
if (x.nonEmpty)
x.split('-').foreach {
y => s.push(y.toInt)
}
s
}
Run Code Online (Sandbox Code Playgroud)
哪个有效,但非常难看.我错过了什么?
编辑:感谢所有响应者,我从这次讨论中学到了很多东西
Stack(x.split("-").map(_.toInt).reverse: _*)
Run Code Online (Sandbox Code Playgroud)
这里的技巧是将你从split获得的数组传递给Stack伴随对象构建器.默认情况下,项目的顺序与数组的顺序相同,因此您必须先反转数组.
请注意"将此视为列表,而不是单个项目"注释: _*.
编辑:如果你不想单独捕获空字符串的情况,就像这样(使用底部的一个用于可变堆栈,顶部用于不可变的):
if (x.isEmpty) Stack() else Stack(x.split("-").map(_.toInt).reverse: _*)
if (x.isEmpty) Stack[Int]() else Stack(x.split("-").map(_.toInt).reverse: _*)
Run Code Online (Sandbox Code Playgroud)
然后你可以过滤掉空字符串:
Stack(x.split("-").filterNot(_.isEmpty).map(_.toInt).reverse: _*)
Run Code Online (Sandbox Code Playgroud)
这也将"帮助"处理像7-9----2-2-4你这样的东西(它会给予Stack(4,2,2,9,7)).
如果你想处理更糟糕的格式化错误,你可以
val guard = scala.util.control.Exception.catching[Int](classOf[NumberFormatException])
Stack(x.split("-").flatMap(x => guard.opt(x.toInt)).reverse: _*)
Run Code Online (Sandbox Code Playgroud)
仅返回实际可以解析的项目.
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |