코틀린에서의 문자열
- 자바의 문자열과 동일하다
- 자바의 문자열에 API 추가적인 확장 함수 제공
- 그냥 좀더 편하게 쓸 수 있다곤하는데 체감은 안됨
문자열 나누기
String.split
은 실제 정규식을 씀.
- split(”.”) 은 마침표 . 를 정규식의 모든 모든 문자를 나타내는 와일드 카드로 해석함
fun main() { val split = "12.345-6".split(".", "-") println("split = ${split}"); } split = [12, 345, 6]
정규식의 사용
toRegex
확장 함수를 통해 문자열을 정규식으로 변환한다.fun main() { val toRegex = "[.\\-]".toRegex() val split = "12.345-6.A".split(toRegex) println("split = $split"); } split = [12, 345, 6, A]
fun main() { val toRegex = "[.\\-*]".toRegex() val split = "12.3*4\\5-6.A".split(toRegex) println("split = $split"); } split = [12, 3, 4\5, 6, A]
- [ , ] 는 정규표현식에서 문자 집합을 정의하는 데 사용
- 대괄호 안의 문자는 이 중 어느 하나에 해당하는 문자를 찾는다.
- \\-
- 는 하이픈을 별도로 이스케이핑이 필요하기 때문에 정의되었다고 한다.
[A-Z]
- A 부터 Z 까지의 의미를 나타내느 범위 지정이 정규식에서 적용된다 원래는…
- [ , ] 는 정규표현식에서 문자 집합을 정의하는 데 사용
3중 따옴표 문자열
파일 경로 파싱 예제
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")
}
}
fun main() {
parsePath("/Users/yole/kotlin-book/chapter.adoc")
}
Dir: /Users/yole/kotlin-book, name: chapter, ext: adoc
(.+)
- 하나의 그룹을 의미
- 첫 번째
(.+)
: 마지막/
이전의 모든 문자에 매치됩니다 (디렉터리).
- 두 번째
(.+)
: 마지막/
이후부터 마지막.
이전의 모든 문자에 매치됩니다 (파일 이름).
- 세 번째
(.+)
: 마지막.
이후의 모든 문자에 매치됩니다 (확장자).
matchEntire
- 은 전체 문자열이 정규식 패턴과 매치되는 경우에만 결과 반환함
destructured
- 매치된 그룹들을 바로 분해해서 변수에 할당이 가능함.
그럼 matchResult 의 타입이 뭐지?
MatcherMatchResult 를 반환하네..
- 이후에
- destructured 수행시
- groups 안에 정규식에 따라 나뉜 값들을 보관한다.
- 나뉜 값이 String 에서 나눠진 MatchGroup 의 범위까지 포함되어 있는 듯하다.
Uploaded by N2T
'코틀린 > 코틀린인액션' 카테고리의 다른 글
[코틀린인액션] 확장 프로퍼티 사용 (0) | 2023.11.29 |
---|---|
[코틀린인액션] 가변 인자 함수 , 중위 호출 , MapOf (0) | 2023.11.29 |
[코틀린인액션] 코틀린에서의 예외? (0) | 2023.11.29 |
[코틀린인액션] 코틀린에서 컬렉션 만들기 (0) | 2023.11.29 |
[코틀린인액션] 코틀린에서의 디폴트 파라미터 자바에서도 사용해보기 (0) | 2023.11.29 |