[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

Scala

Posted by GENDOSU