1. 概要

このチュートリアルでは、ScalaのStringsを調べます。

2. 文字列の定義

文字列を二重引用符で囲まれた1行の文字列として定義できます

val singleLineString = "Hello, I am a single line string"

さらに、3つの二重引用符で囲まれた複数行の文字列として定義できます

val multiLineString = """Hello, I am  
  |a multiline
  |String""".stripMargin

pipe文字とstripMarginメソッドを使用して、テキストを左寄せしました。

3. 文字列平等

Scalaでの2つの文字列の比較は、==演算子を使用して処理されます。 最初に、メソッドは潜在的なnull値をチェックし、次にStringequalsメソッドを呼び出して比較します。

assert("Hello, I am a single line string" == singleLineString)

4. 文字列連結

concatメソッドまたは+演算子を使用して、文字列を連結できます。

val askTheTimeString = "...What time is it?"

val concatStrWithConcat = singleLineString.concat(askTheTimeString)
assert(concatStrWithConcat == "Hello, I am a single line string...What time is it?")

val concatStr = singleLineString + askTheTimeString
assert( concatStr == "Hello, I am a single line string...What time is it?")

5. String正規表現とのマッチング

Scalaは、scala.util.matchingパッケージで利用可能なRegexクラスを介して正規表現をサポートします。 Stringrメソッドを使用すると、 Regex インスタンスに変換できます。ここで、Stringマッチングを実行できます。

val testString = "this is a string with numbers 123456"
val regEx: Regex = "^(?=.*[a-zA-Z])(?=.*[0-9])".r

val result = regEx
  .findFirstMatchIn(testString)
  .isDefined
assertTrue(result == true)

上記の例では、Stringに文字と数字の両方が含まれているかどうかを確認しています。

括弧を使用して正規表現のグループを照合することも可能です。それがどのように機能するかを見て、最初に複数行の文字列を定義しましょう。

val testString = """property1: value1
    |property2: value2
    |property"""

複数行のString。に含まれるすべてのキー値プロパティを一致させたいとします。これを実現するために、規則式のグループを定義し、それらを一致させることができます。

val regExGroup = "([0-9a-zA-Z- ]+): ([0-9a-zA-Z-#()/. ]+)".r
val matchResults = regExGroup.findAllMatchIn(testString)

その結果、一致には正規表現に一致するkey-valueプロパティのみが含まれます。

val matchedStrings = matchResult
  .map(regExMatch => 
    s"key: ${(regExMatch.group(1)} value: ${(regExMatch.group(2)}"
  ).mkString(System.lineSeparator)

val expected = """key: property1 value: value1
                 |key: property2 value: value2"""
  .stripMargin

assert(matchedStrings.equals(expected))

6. 文字列補間

Scala の文字列補間は、 s、f、およびrawメソッドを使用して取得できます。

s 補間を使用すると、リテラル文字列で変数を直接使用できます。例:

val age = 30
val agePresentation = s"I am $age"
assert("I am 30" == agePresentation)

f補間では、タイプセーフ補間があります

val >val name = "Michele"
val interpStr = f"My name is $name%s. I am $age%d years old and $height%1.2f meters tall"
assert(interpStr == "My name is Michele. I am 30 years old and 1,70 meters tall")

最後に、raw補間は、リテラルをエスケープしないことを除いて、s補間に似ています

val result = raw"My name is $name%s. \n $agePresentation and $height%1.2f meters tall"
assert(result == "My name is Michele%s. \\n I am 30 and 1.7%1.2f meters tall")

7. 結論

この記事では、ScalaでStringsを使用して実行できる主な操作のいくつかを見ていきました。 いつものように、完全なソースコードはGitHubにあります。