[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください
Scalaで文字列同士を連結する方法をご紹介します。
Stringクラス同士の連結は + 演算子で連結することができます。
val str1 = "hello" val str2 = "world" println(str1 + " " + str2)
結果は次の通りです。
hello world
文字列の補間
Scalaには文字列の補間と呼ばれる機能があります。
""で囲われた文字列リテラルの先頭にs, f, rawといった補間子と呼ばれるものを付けることで補間が行われます。
例えば、 + 演算子でこのような連結をしていたとします。
val year = "2019" val month = "4" val day = "1" println(year + "/" + month + "/" + day)
結果は次の通りです。
2019/4/1
+ での連結を繰り返す場合、 s を用いるのがスッキリかけて便利です。
s を使うことで、文字列リテラルの中で $ を変数の先頭につけて展開することができます。
val year = "2019" val month = "4" val day = "1" println(s"$year/$month/$day")
+ で結合したのと同じものが出力されます。
2019/4/1
f の場合、文字列リテラルの中で $ を先頭につけた変数の末尾にprintfと同じフォーマット指定子を付与することで展開が行えます。
val pi: Float = 3.141592653589793f println(f"pi => $pi%1.2f")
フォーマット指定付きで展開されたものが出力されます。
pi => 3.14
raw を使うと、エスケープを無視します。
println(raw"hello world\n")
改行コードを無視したそのままの文字列が出力されます。
hello world\n
StringBuilder
実はStringクラスは不変です。
したがって、結合するたびに新しいインスタンスを生成します。
そのため、結合を繰り返したり、大きな文字列を生成したりする場合にメモリの消費が大きくなります。
その場合には可変なStringBuilderクラスを利用しましょう。
StringBuilderクラスのインスタンスはappendメソッドで自身に文字列を連結していくことができます。
StringクラスへはtoStringメソッドを使うことで変換することができます。
val str = new StringBuilder str.append("hello") str.append(" ") str.append("world") println(str.toString)
append で順に結合したものが出力されます。
hello world
補足
str1 + str2 のように文字列を連結するのに使用していた + 演算子は、実はStringクラスのメソッドです。
冗長ですし実用的でもありませんが、str1.+(str2) と書いて呼び出すこともできます。