Kotlin Koans - Introduction / String templates

이준영·2020년 12월 9일
0

Kotlin Koans

목록 보기
6/9
post-thumbnail

문제

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

fun getPattern(): String = TODO()

Triple-quoted strings are not only useful for multiline strings, but also for creating regex patterns as you don't need to escape a backslash with a backslash.

The following pattern matches a date in the format 13.06.1992 (two digits, a dot, two digits, a dot, four digits):

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

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

풀이

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

fun getPattern(): String = """\d{2} $month \d{4}"""

이번 문제는 정규표현식에 대한 이해가 있어야지 풀 수 있는 문제였습니다.

우선 getPattern() 함수가 반환하는 문자열은 """ 로 생성된 raw 문자열입니다. raw 문자열은 이스케이프 문자를 사용하지 않아도 되기 때문에 정규표현식 패턴을 만들기에 용이합니다.

문제에서 요구한 13 JUN 1992 패턴은 앞, 뒤는 예제처럼 \d{2} 표현식을 사용하면 되고, 가운데 달이 들어가는 부분이 헛갈렸던 것 같습니다. 정규표현식을 찾아보니 () 는 안에 들어가있는 문자가 포함되어야 한다는 것이고, | 는 우리가 흔히 알고있는 or 연산과 동일했습니다.

즉, month 변수를 그대로 문자열에 넣어서 반환해주면 되는데, 이때 문자열 템플릿을 활용하면 해결할 수 있습니다.

"""\d{2} $month \d{2}""" 에서 $ 문자는 템플릿 표현식의 시작을 알리는 기호입니다. 이처럼 작성하면 실제로는 """\d{2} (JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC) \d{2}""" 와 같이 문자열이 생성되어 반환됩니다.

학습 내용

Strings

String templates

문자열 리터럴은 템플릿 표현식을 포함할 수 있습니다. 이는 값이 결정되고 결과가 문자열로 연결된 코드 조각이라 볼 수 있고, 달러 기호($)로 시작되고 간단한 이름이 붙습니다.

val i = 10
println("i = $i") // prints "i = 10"

또는 중괄호({}) 안에 임의의 표현식을 작성할 수 있습니다.

val s = "abc"
println("$s.length is ${s.length}")

만약, raw 문자열에서 $ 문자를 표현해야 한다면 홑따옴표 '' 를 사용하여 표현할 수 있습니다.

val price = """
${'$'}9.99
"""

정리하며

Kotlin은 문자열 내부에서 템플릿 표현식을 사용할 수 있도록 지원합니다. 또한 Kotlin에서는 문자열을 연결하는 방식보다는 문자열 템플릿과 raw 문자열이 성능 상의 이점을 가지고 있다고 소개합니다. 문자열 템플릿은 $ 문자 뒤에 간단한 식을 붙여서 사용 가능하고, 또는 $ 문자 뒤에 중괄호({})를 사용하고 내부에 식을 작성하여 사용할 수도 있습니다.

참고 자료

Kotlin Reference - Basics / Basic Types

Regex pattern Kotlin - stackoverflow

코틀린에서 정규 표현식 사용하기 - GM.Lee

[TIP] 정규표현식(Pattern Matching) 완전 정리! - High Code

profile
growing up 🐥

0개의 댓글