Scalaの文字列の紹介
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値をチェックし、次にStringでequalsメソッドを呼び出して比較します。
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クラスを介して正規表現をサポートします。 Stringでrメソッドを使用すると、 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のにあります。