下記のような文字列があったとする。
"foo:1.0"
これを foo(String)と1.0(Double)に分けたかった。
とりあえず普通にsplitしてみる。
val arr = "foo:1.0".split(":") x = arr(0) y = arr(1).toDouble
まあ、これでもいいけど、なんとなくこの手の処理は1行で書きたい。
splitした後にパターンマッチでtupleにしてみる。
val (x, y) = "foo:1.0".split(":") match { case Array(x, y) => (x, y.toDouble) }
うん、ちょっとスッキリした。
splitでなくspanを使ってみる。spanは指定した文字が出るまでをtupleの1つ目の要素に、指定文字が出現した意向を2つ目めの要素に入れる的な動きができる。
val (x, y) = "foo:1.0".span(_ != ':') match { case (x, y) => (x, y.tail.toDouble) }
splitAtを使っても良いのか。
val str = "foo:1.0" val (x, y) = str.splitAt(str.indexOf(':')) match { case (x, y) => (x, y.tail.toDouble) }
書き方によって不正な文字が入った場合のエラーの出る位置とかが変わるし、指定文字が複数あった場合の挙動も変わる。必要な例外処理に合った書き方を選びたい。