#5 Kotlin Koans Introduction/Strings 解説


1 はじめに

Kotlin公式リファレンスのKotlin Koans/Stringsの解説記事です。

Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。

ただし、リファレンスを自力で読む力を養いたい方は、
すぐにこの記事に目を通さないで下さい!

一度各自で挑戦してから、お目通し頂ければと思います

2 正規表現・エスケープシーケンス

正規表現(regex patterns)とは、文字列に関する文法事項とイメージして頂ければOKです。

特殊な記号を用いて文字列パターンを指定します。

エスケープシーケンスとは、画面上に文字を出力する際に、文字そのものを出力するのではなく、文字色の変更やカーソルの移動、文字の消去など、文字出力の制御を行う特殊な文字列のことです。

/ 記号と他の記号のセットで用います。

エスケープシーケンス(エスケープ文字)とは? ~見えない文字を表現する~|データ分析用語を解説を引用させていただきました。)

具体例は#3で解説します。

3 Introduction/Stringsの解説

Kotlin Koans Introduction/Stringsの解説です。
随時本サイトの内容を引用させていただきます。

右側の本文を見てみましょう。

Read about different string literals and string templates in Kotlin.

Raw strings are useful for writing regex patterns, you don't need to escape a backslash by a backslash. Below there is a pattern that matches a date in format 13.06.1992 (two digits, a dot, two digits, a dot, four digits):

fun getPattern() = """\d{2}\.\d{2}\.\d{4}"""

Using month variable rewrite this pattern in such a way that it matches the date in format 13 JUN 1992 (two digits, a whitespace, a month abbreviation, a whitespace, four digits).

different string literals and string templatesを読みなさい。
raw stringsは正規表現を記述するのに便利である。バックスラッシュでバックスラッシュをエスケープする必要がない。
以下は13.06.1992(2個の数字、1個のドット、2個の数字、1個のドット、4個の数字)のフォーマットの日付にマッチする文字列パターンである。

変数monthを用いてこのパターンを13 JUN 1992(2個の数字、スペース、月の略記、スペース、4個の数字)に書き直しなさい。

とあります。(13,06,1992,JUNはあくまでパターンの例ですので、気にする必要はありません。)

つまり、

val month = "(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)"

fun getPattern(): String = TODO()

変数month(月の略記が格納されている)を用いて、TODO()部分で13 JUN 1992のフォーマットを実現すれば良いわけです。

ここで、正規表現・エスケープシーケンスを利用します。

使用する、正規表現・エスケープシーケンスは以下のとおりです。

  • \d:1~9のいずれかの数字を表現します。
  • {}:直前の文字を{}内の数字の回数分表示します。
  • ${}:{}内の文字列を、別の文字列に埋め込む見ます(これをString Templateと言います。)

これらを用いて、TODO()を

"""\d{2} ${month} \d{4}"""

と書き換えればOKです。


(参考)
13.06.1992を表現している正規表現・エスケープシーケンスを見てみましょう。

"""\d{2}\.\d{2}\.\d{4}"""

\.は正規表現での.の「任意の1文字を指定する」といった意味を打ち消し、.そのものを表示します。


4 最後に

次回はKotlin Koans Introducion/Data classesの解説をします

あと、みなさんraw stringsってどう日本語で呼んでいるんでしょうか、、、?

よろしければご意見ください