[Scala]文字列操作
文字列の長さを取得
scala> "test" length Int = 4
文字列の繰り返し
scala> "abc" * 3 String = abcabcabc
()で、指定位置のcharを取り出す
scala> "abcde"(2) Char = c
文字列の比較(<,>,<=,>=)
scala> "abc" < "abd" Boolean = true
StringBuilderに文字列を追加
scala> val str = "abc" scala> val strbuild = new StringBuilder scala> str.addString(strbuild)
文字列の先頭を大文字に変換
scala> "test".capitalize String = Test
文字列の文字を1文字ずつ処理をする
scala> "abcdef".collect {a => a match {case 'a' => 'A'; case x => x}} // もしくは scala> "abcdef".collect {case 'a' => 'A'; case x => x}
文字列比較
scala> "test" compare "stes" Int = 1
scala> "test" compare "test" Int = 0
文字列Aに文字列Bが含まれるかを判定
scala> "test" contains "te" Boolean = true
指定した条件に当てはまる文字列をカウント
scala> "test1" count {c => c >= '0' && c <= '9'} Int = 1
差分の抽出
scala> "bad" diff "body" String = a
bodyという文字列の中でbadがそれぞれ含まれるかを判定して含まれていない文字を返す
文字の重複削除
scala> "test" distinct String = tes
指定文字数分だけ、削る
先頭から削る
scala> "test" drop 1 String = est
右から削る
scala> "test" dropRight 1 String = tes
左から削る
scala> "test" tail String = est
条件に一致するまで文字を削り続ける
scala> "test" dropWhile {_ != 's'} String = st
scala> "tests" endsWith "ts" Boolean = true
文字列の比較
scala> "test" equals "test" Boolean = true
scala> "test" equals "TEST" Boolean = false
大小文字を無視して比較
scala> "test" equalsIgnoreCase "TEST" Boolean = true
文字が含まれるかを判定
scala> "test" exists {'t' equals}
条件に一致した文字のみを抽出(逆はfilterNot)
scala> "test" filter {c => 'e'.equals(c) || 's'.equals(c)} String = es
条件に一致した文字を抽出
scala> "test" find {_ == 't'} Option[Char] = Some(t)
数値チェック
scala> "1234" forall {_.isDigit}
foreach
scala> "test" foreach {println} t e s t
書式指定
scala> "%4d-%2d-%02d" format (2011, 10, 1) String = 2011-10-01
ロケールを指定して書式指定
scala> val cal = java.util.Calendar.getInstance scala> "%tA" formatLocal (java.util.Locale.JAPAN, cal) String = 月曜日
指定文字数で分割
scala> ("i love you" grouped 3) foreach println i l ove yo u
先頭の1文字を得る
scala> "abcd" head Char = a
対象の文字の最初に出現する位置のインデックスを得る
scala> "abcd" indexOf 'b' Int = 1
カラかどうかを判定する
scala> "" isEmpty Boolean = true
文字列の最後を得る
scala> "last" last Char = t
カラ文字にlastを使用すると例外が出る
scala> "" last java.util.NoSuchElementException
文字列を改行で区切ってイテレータで返す
scala> val a = "test1\ntest2\ntest3".lines scala> a foreach(println) test1 test2 test3
改行コードを残したい場合
scala> val a = "test1\ntest2\ntest3".linesWithSeparators
コレクションをループで回して処理をする
scala> "test" map {c => c.toUpper} String = TEST
正規表現
scala> "test" matches "^t.+t$" Boolean = true
文字列置換(replace、replaceAll、replaceFirst)
scala> "i love java" replace("java", "scala") java.lang.String = i love scala
逆に並べる
scala> "test" reverse String = tset
文字列の一部を取得
scala> "i love scala" substring(2, 6) java.lang.String = love
文字をソート
scala> "946238" sorted String = 234689
分割
scala> "2011/10/1 10:22:33" split Array('/', ':', ' ') Array[String] = Array(2011, 10, 1, 10, 22, 33)
末端の改行コードを削除
scala> "test\n" stripLineEnd String = test
前方、後方の空白を削除
scala> " test " trim java.lang.String = test
la> “test" map {c => c.toUpper}
res17: String = TEST