[KOTLIN] 문자열과 정규

문자열 나누기

자바의 String Split 메서드 문제점

  • 자바의 String.split 메서드 사용

    자바에서 “Hello.Split”.split(”.”) 을 사용하여 문자열을 점(.) 을 기준으로 나누려고 시도하는 경우

    해당 메서드는 정규식을 기반으로 작동함.

    마침표는 모든 문자를 나타내는 와일드카드로 해석되기에, 빈 배열을 반환해버림

코틀린에서 split

  • 다양한 파라미터 조합을 받는 split 확장 함수를 제공한다.
    • 정규식으로 받고싶으면 Regex 타입을 받고
    • 일반 텍스트의 경우 String 타입의 값을 받음

정규식을 사용한 문자열 분리

fun main() {
    println("12.345-6.A".split("[.\\-]".toRegex())) // 출력: [12, 345, 6, A]
}

[12, 345, 6, A]
  • toRegex 확장 함수를 사용하여 문자열을 정규식으로 변환함.

문자열과 문자를 사용한 문자열 분리

println("12.345-6.A".split(".", "-")) // 출력: [12, 345, 6, A]

정규식과 3중 따옴표로 묶은 문자열

파일 경로 파싱

  • 파일의 전체 경로명을 디렉터리, 파일 이름, 확장자로 구분하는 작업의 경우

String 확장 함수를 사용한 경로 파싱

fun parsePath(path: String) {
    val directory = path.substringBeforeLast("/")
    val fullName = path.substringAfterLast("/")
    val fileName = fullName.substringBeforeLast(".")
    val extension = fullName.substringAfterLast(".")
    println("Dir: $directory, name: $fileName, ext: $extension")
}

parsePath("/Users/yole/kotlin-book/chapter.adoc")
// 출력: Dir: /Users/yole/kotlin-book, name: chapter, ext: adoc

정규식을 사용한 경로 파싱

fun parsePath(path: String) {
    val regex = """(.+)/(.+)\.(.+)""".toRegex()
    val matchResult = regex.matchEntire(path)
    if (matchResult != null) {
        val (directory, filename, extension) = matchResult.destructured
        println("Dir: $directory, name: $filename, ext: $extension")
    }
}

// 사용 예:
parsePath("/Users/yole/kotlin-book/chapter.adoc")
// 출력: Dir: /Users/yole/kotlin-book, name: chapter, ext: adoc
  • (.+) 는 가능한 한 가장 긴 부분의 문자열과 매치를 시도함.
    • 이를 탐욕적 매칭 이라고 함.
    • path/to/dir/filename.ext
      • 에서 path/to/dir

구조 분해 선언과 정규식

matchResult.destructured 를 통해 정규식 매치 결과를 구조 분해 선언을 통해 각 변수에 할당할 수 있음.


Uploaded by N2T

'코틀린 > 코틀린인액션' 카테고리의 다른 글

[KOTLIN] 로컬 함수와 확장  (0) 2024.02.09
[KOTLIN] 컬렉션의 처리  (0) 2024.02.09
[KOTLIN] 함수 정의와 호출  (0) 2024.02.08
[KOTLIN] 컬렉션  (0) 2024.02.08
[KOTLIN] try catch finally  (0) 2024.02.08