들어가기 전

Kotlin에서 지원하는 문자열 대체 메서드에 대해 알아보겠습니다. 자바는 replace, replaceAll 등을 지원하는데 Kotlin 같은 경우에는 removePrefix, removeSuffix, removeRange, removeSurrounding 지원합니다.

 

 

removePrefix

removePrefix의 내부는 아래사진과 같이 되어있습니다.

 

매개변수로 들어온 prefix값을 해당문자열의 시작단어인지를 비교하고 매개변수의 값이 시작단어일 경우  prefix의 크기만큼 문자열을 잘라 return을 해줍니다.

 

 

테스트 코드

class StringRemoveMethodTest : FreeSpec({
    "removePrefix" - {
         "조건이 일치하면 kotlin^^을 반환한다." - {
            val before = "%%kotlin^^"
            val after = before.removePrefix("%%")

            after shouldBe "kotlin^^"
        }
        "조건이 일치하지 않으면 %%kotlin^^을 반환한다." - {
            val before = "%%kotlin^^"
            val after = before.removePrefix("^^")

            after shouldBe "%%kotlin^^"
        }
   }
 })

 

 

removeSuffix

removeSuffix의 내부는 아래사진과 같이 되어있습니다.

 

 

prefix와 반대로 매개변수로 들어온 suffix가 해당문자열의 마지막단어인지를 비교하고 마지막 단어일 경우 문자열을 0번째 인덱스부터 문자열 크기 - suffix문자의 크기만큼 뺀 문자열 잘라서 return 합니다.

 

테스트 코드

class StringRemoveMethodTest : FreeSpec({
    "removeSuffix" - {
        "조건이 일치하면 %%kotlin을 반환한다." - {
            val before = "%%kotlin^^"
            val after = before.removeSuffix("^^")

            after shouldBe "%%kotlin"
        }
        "조건이 일치하지 않으면 %%kotlin^^을 반환한다." - {
            val before = "%%kotlin^^"
            val after = before.removeSuffix("%%")

            after shouldBe "%%kotlin^^"
        }
   }
})

 

removeSurrounding

removeSurrounding의 내부는 아래사진과 같이 되어있습니다.

 

 

위에서  설명한 removePrefix, removeSuffix를 모두 포함한 메서드입니다. 첫 번째 매개변수는 prefix, 두 번째 매개변수는 suffix값입니다.

즉 removeSurrounding은 removePrefix와 removeSuffix 모두 만족해야 합니다.

 

테스트 코드

class StringRemoveMethodTest : FreeSpec({
    "removeSurrounding" - {
        "prefix의 조건은 일치하고 suffix의 조건이 일치하지 않으면 %%kotlin^^을 반환한다." - {
            val before = "%%kotlin^^"
            val after = before.removeSurrounding("%%", "%%")

            after shouldBe "%%kotlin^^"
        }
        "suffix의의 조건은 일치하고 prefix의 조건이 일치하지 않으면 %%kotlin^^을 반환한다." - {
            val before = "%%kotlin^^"
            val after = before.removeSurrounding("^^", "^^")

            after shouldBe "%%kotlin^^"
        }
        "prefix 조건과 suffix 조건이 모두 일치하면 kotlin을 반환한다." - {
            val before = "%%kotlin^^"
            val after = before.removeSurrounding("%%", "^^")

            after shouldBe "kotlin"
        }
        "매개변수의 값이 시작단어와 끝단어와 일치하면 kotlin을 반환한다." - {
            val before = "%%kotlin%%"
            val after = before.removeSurrounding("%%")

            after shouldBe "kotlin"
        }
        "매개변수의 값이 시작단어와 끝단어와 일치하지 않으면 %%kotlin%%을 반환한다." - {
            val before = "%%kotlin%%"
            val after = before.removeSurrounding("^^")

            after shouldBe "%%kotlin%%"
        }
    }
})

 

removeRange

removeRange의 내부는 아래사진과 같이 되어있습니다.

 

 

테스트 코드

class StringRemoveMethodTest : FreeSpec({
    "removeRange" - {
        "시작인덱스 0과 끝 인덱스 2로 설정하면 설정한 인덱스 범위를 제외한 kotlin^^을 반환한다." - {
            val before = "%%kotlin^^"
            val after = before.removeRange(0, 2)

            after shouldBe "kotlin^^"
        }
    }
})
  • removeRangeEx.removeRange(0,2)는 0번째 인덱스부터 2 - 1 번째 인덱스까지 문자열을 잘라서 return 합니다.

 

 

참고!

위에 설명한 메서드들은 원본 데이터의 값을 변경하는 게 아닌 원본데이터를 기반으로 새로운 문자열 데이터를 반환해 줍니다.

'Kotlin' 카테고리의 다른 글

[Kotlin] java.time.* 사용시 발생하는 예외 해결 방법  (0) 2023.06.19
[Kotlin] 기본 문법 (2)  (0) 2023.04.20
[Kotlin] data class VS class  (0) 2023.02.24
[Kotlin] 기본 문법 (1)  (0) 2023.02.19