Tiny Star
본문 바로가기
Dev Log/Kotlin

[Kotlin] 코틀린 문자열 자르기와 다루기 완전 정복 (split, substring, 정규식)

by 별터 2026. 1. 2.

개발을 하다 보면 가장 많이 마주치는 작업 중 하나가 바로 '문자열 처리(String)' 입니다.

특히 알고리즘 문제나 데이터를 파싱해야 하는 과제(예: 계산기 만들기)에서는 문자열을 원하는 대로 자르고, 찾고, 검증하는 능력이 필수적입니다.

 

오늘은 코틀린(Kotlin)에서 문자열을 다루는 다양한 방법들을, 자바(Java)와 비교해보며 실전 예제와 함께 정리해 보았습니다.


1. 문자열 자르기: split

문자열을 특정 구분자를 기준으로 쪼개서 리스트(List)로 만들 때 사용합니다.

 

- 기본 사용법

가장 기본적인 방법입니다. 구분자를 하나 지정해서 자릅니다.

val input = "1, 2, 3"
val numbers = input.split(",")

println(numbers) // [1, 2, 3]

 

- 여러 구분자로 자르기

코틀린의 split 은 여러 개의 구분자를 한 번에 넣을 수 있어 매우 편리합니다.

val input = "1,2:3"
val numbers = input.split(",", ":") // 쉼표와 콜론 모두 구분자로 사용

println(numbers) // [1, 2, 3]

 

- 정규식(Regex)으로 자르기

복잡한 패턴으로 잘라야 할 때는 정규식을 사용합니다. 이때는 toRegex()를 활용하면 직관적입니다.

val input = "1-2|3"
// 하이픈(-) 또는 파이프(|)로 자르기
val numbers = input.split("-|".toRegex())

println(numbers) // [1, 2, 3]

2. 문자열 슬라이싱: substring vs 코틀린의 마법

자바를 쓰셨던 분들이라면 substring(startIndext, endIndex)가 익숙하실 겁니다. 코틀린은 여기서 한 반 더 나아가, 가독성이 뛰어난 확장 함수들을 제공합니다.

 

- 기본: 인덱스로 자르기 (substring)

val text = "//;\n1;2;3"

// 인덱스 2부터 4 앞까지 (2, 3번 인덱스 추출)
val delimiter = text.substring(2, 4)

// 2번 인덱스: ;
// 3번 인덱스: \n
// 4번 인덱스: 1
println(delimiter) // ";\n" (주의: 끝 인덱스는 포함되지 않음)

 

- 추천: 특정 문자 기준으로 자르기 (substringAfter, substringBefore)

인덱스를 일일이 세지 않아도 됩니다. "이 글자 뒤를 잘라줘!"라고 명령할 수 있습니다.

계산기 미션의 커스텀 구분자 처리 로직에서 빛을 발하는 기능입니다.

val text = "User:Starter"

// 1. "User:" 뒷부분만 가져오기
val name = text.substringAfter("User:")
println(name) // "Starter"

// 2. 특정 문자 앞부분만 가져오기
val title = text.substringBefore(":")
println(title) // "User"

// 3. 만약 찾는 문자가 없으면? (그대로 반환 vs 지정 값 반환)
val safe = text.substringAfter("@", "없음")
println(safe) // "User:Starter" (@가 없어서 전체 반환)

3. 문자열 검증하기: startsWith, contains

입력값이 내가 원하는 형식인지 확인할 때 사용합니다.

val input = "//;\n1;2;3"

// 1. 특정 문자로 시작하는지 확인 (접두사)
if (input.startsWith("//")) {
	println("커스텀 구분자가 있습니다.")
}

// 2. 특정 문자로 끝나는지 확인 (접미사)
if (input.endsWith("3")) {
	println("3으로 끝납니다.")
}

// 3. 특정 문자가 폼함되어 있는지 확인
if (input.contains("\n")) {
	println("줄바꿈이 포함되어 있습니다.")
}

4. 실전 응용: 커스텀 구분자 추출하기

이번 우아한테크코스 프리코스 계산기 과제에서 실제로 사용했던 로직입니다. //\n 사이에 있는 문자를 추출해야 할 때, 코틀린의 함수들을 조합하면 이렇게 우아하게 짤 수 있습니다.

fun extractCustomDelimiter(input: String): String {
	// 예시 입력: "//;\n1;2;3"
    
    if (input.startsWith("//") && input.contains("\n")) {
    	// 1. "//" 뒷부분을 가져온다 -> ";\n1;2;3"
        val afterSlash = input.substringAfter("//")
        
        // 2. 거기서 "\n" 앞부분을 가져온다 -> ";"
        val delimiter = afterSlash.substringBefore("\n")
        
        return delimiter
    }
    return ""
}

마무리

코틀린은 자바보다 훨씬 강력하고 직관적인 문자열 처리 함수들을 제공합니다. 인덱스를 계산하느라 머리 아파하지 말고, substringAfter 같은 직관적인 함수를 적극 활용해 보세요! 코드가 훨씬 읽기 좋아집니다.