文字列を連結するには?+演算子やString interpolationの使い方

Scala 3 (Dotty 0.26.0-RC1) 2.13.3 2.12.12
最終更新:2020年5月19日

[AD] scalapediaでは記事作成ボランティアを募集しています

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) と書いて呼び出すこともできます。

サイト内検索


カテゴリ「文字列処理」の記事

文字列をエスケープしたり復元したりする方法(Apache Commons Text) JavaとScalaのString/StringBuilder/StringBuffer使い分け事情 文字列を分割する方法(split・splitAt・linesIterator・linesWithSeparatorsメソッド) trimメソッドで文字列の前後の空白を除去する 文字列が一致するか比較する方法/大文字・小文字を区別せずに比較する方法 特定の文字の文字コード(コード・ポイント)を取得する replaceメソッドなど、文字列を置換する方法を紹介 文字列の先頭や末尾を、取得したり切り落としたりする方法 containsメソッドでStringに特定の文字列が含まれるか調べる方法 数値を文字列に変換する方法 stripメソッドで文字列の前後の全角空白を除去する 文字列を数値に変換するには?to○○メソッドと注意点について 文字列を辞書的に比較する方法/大文字・小文字を区別せずに比較する方法 文字列が特定の文字列で始まるか・終わるかを調べる方法 【getBytes&size】文字列のバイト長を取得する方法 substringでStringを切り取り、部分文字列を抽出する方法 StringOpsとWrappedStringの違いは? 文字列を連結するには?+演算子やString interpolationの使い方 文字列の大文字へ・小文字へ変換する方法 文字列を逆順にする方法 文字列の文字コード(文字セット)を変換する方法 文字列の長さを取得する方法:lengthとcodePointCountの使い分け 文字列をURLエンコード・デコードする方法 文字列が正規表現に合致するか調べる方法 この文字の位置はどこ?文字列のインデックスを取得する方法 文字列をバイト列に、またはバイト列を文字列に変換する方法

カテゴリ「文字列処理」の記事

文字列をエスケープしたり復元したりする方法(Apache Commons Text) JavaとScalaのString/StringBuilder/StringBuffer使い分け事情 文字列を分割する方法(split・splitAt・linesIterator・linesWithSeparatorsメソッド) trimメソッドで文字列の前後の空白を除去する 文字列が一致するか比較する方法/大文字・小文字を区別せずに比較する方法 特定の文字の文字コード(コード・ポイント)を取得する replaceメソッドなど、文字列を置換する方法を紹介 文字列の先頭や末尾を、取得したり切り落としたりする方法 containsメソッドでStringに特定の文字列が含まれるか調べる方法 数値を文字列に変換する方法 stripメソッドで文字列の前後の全角空白を除去する 文字列を数値に変換するには?to○○メソッドと注意点について 文字列を辞書的に比較する方法/大文字・小文字を区別せずに比較する方法 文字列が特定の文字列で始まるか・終わるかを調べる方法 【getBytes&size】文字列のバイト長を取得する方法 substringでStringを切り取り、部分文字列を抽出する方法 StringOpsとWrappedStringの違いは? 文字列を連結するには?+演算子やString interpolationの使い方 文字列の大文字へ・小文字へ変換する方法 文字列を逆順にする方法 文字列の文字コード(文字セット)を変換する方法 文字列の長さを取得する方法:lengthとcodePointCountの使い分け 文字列をURLエンコード・デコードする方法 文字列が正規表現に合致するか調べる方法 この文字の位置はどこ?文字列のインデックスを取得する方法 文字列をバイト列に、またはバイト列を文字列に変換する方法