문자열 나누기
자바의 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 |