코틀린 내장 Split 라이브러리는 여러개의 구분자를 지원하긴 하지만, 구분자가 계속 가변적으로 바뀌어 곤란한 경우에 다음과 같은 코드를 사용하면 됩니다.
Split (collection 사용)
컬렉션 타입으로 저장된 여러 구분자를 이용해 문자열을 자르는 확장함수를 구현하였다.
Char
와 String
타입의 구분자들을 포함하는 컬렉션을 이용해 분할이 가능하다.
fun main() {
// splitByCollection
println("한놈,두식이0석삼^너구리".splitByCollection(setOf(",", '0', "^")))
// [한놈, 두식이, 석삼, 너구리]
println("하나:둘,셋;넷".splitByCollection(listOf(":", ",", ';')))
// [하나, 둘, 셋, 넷]
}
// 컬렉션 타입으로 저장된 구분자를 이용해 String 분할하는 확장함수
fun <T> String.splitByCollection(delimiters: Collection<T>): List<String> {
// 구분자들을 이스케이프 처리하고 정규식 OR(|)로 결합
val escapedDelimiters = delimiters.map {
when (it) {
is Char -> Regex.escape(it.toString())
is String -> Regex.escape(it)
else -> throw IllegalArgumentException("지원하지 않는 구분자 타입 입니다.")
}
}
val regex = escapedDelimiters.joinToString("|").toRegex()
// 정규식을 사용해 문자열을 분할
return this.split(regex)
}
컬렉션을 인자로 받으면 좋은 사례
- 구분자를 동적으로 추가하거나 제거해야 할 때
- 구분자의 개수가 가변적일 때
- 구분자를 외부에서 입력받아야 할 때
Char
와String
의 구분자가 혼합되어 있을 때
'스터디 > 코틀린' 카테고리의 다른 글
[Kotlin] String 문자열을 구분자로 분할하기 (Split) (0) | 2024.10.18 |
---|---|
[Kotlin] 02. 배열, 반복문, Nullable, 앨비스?:, 더블 뱅!! (0) | 2024.10.15 |
[Kotlin] 01. 함수, 문자열, When, If, 상수, 변수 (0) | 2024.10.15 |
[Kotlin] 스터디 - Intro (0) | 2024.10.09 |