728x90
코틀린 문자열은 자바 문자열과 같다
코틀린 코드가 만들어낸 문자열을 아무 자바 메서드에 넘겨도 되며, 자바 코드에서 받은 문자열을 아무 코틀린 표준 라이브러리 함수에 전달해도 문제없다.
코틀린은 다양한 확장 함수를 제공함으로써 표준 자바 문자열을 더 즐겁게 다루게 해 준다
또한 혼동이 될 수 있는 일부 메서드에 대해 명확한 확장 함수를 제공함으로써 프로그래머의 실수를 줄여준다
문자열 나누기
자바의 split함수는 배열을 반환하고, 파라미터로 정규식을 받는다.
fun main(args: Array<String>) {
println("12.345-6.A".split("\\.|-".toRegex()))
println("12.345-6.A".split(".", "-"))
}
- 코틀린은 자바의 split대신 여러 가지 다른 조합의 파라미터를 받는 split 확장 함수를 제공함으로 혼동을 야기하는 메서드를 감춘다.
- 정규식을 파라미터로 받는 함수는 String이 아닌 Regix 타입의 값을 받는다
- split함수에 전달하는 값의 타입에 따라 정규식인지 일반 텍스트인지 구별 가능
- 정규식 문법은 자바와 똑같다
- toRegix() 함수를 통해 문자열을 정규식으로 변환이 가능하다
정규식과 3중 따옴표로 묶는 문자열
디렉터리, 파일 이름, 확장자로 문자열을 구분해 보자
코틀린에는 어떤 문자열에서 구분 문자열이 맨 나중, 처음에 나타난 곳 뒤, 앞의 부분 문자열을 반환하는 함수가 있다.
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")
}
- 코틀린에서는 정규식을 사용하지 않고도 쉽게 문자열 파싱이 가능하다.
- 정규식이 필요하면 다음과 같은 라이브러리를 사용하자
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")
}
}
- 3중 따옴표 문자열을 사용해 정규식을 사용했다
- 3중 따옴표 문자열에서는 역슬래시(\) 포함 어떤 이스케이프도 할 필요 없다
- .은 임의의 문자와 매치된다
- (.+)는 마지막 슬래시까지 모든 문자와 매치
여러 줄 3중 따옴표 문자열
3중 따옴표 문자열은 줄 바꿈을 표현하는 아무 문자열이나 그대로 들어간다
따라서 3중 따옴표 문자열을 쓰면 줄 바꿈이 들어있는 프로그램 텍스트를 쉽게 문자열로 만들 수 있다
val kotlinLogo = """| //
.| //
.|/\"""
println(kotlinLogo.trimMargin("."))
- 여러 줄 문자열 들여쓰기를보기 좋게 표현하고 싶다면 들여 쓰기를 하되 끝부분을 특별한 문자열로 표시하고 trimMargin을 사용해 그 문자열과 그 직전 공백을 제거하자
- 여러 줄 문자열에는 줄바꿈이 들어가지만 \n과 같은 특수문자를 사용해 넣을 수 없다
- 3중 따옴표 문자열은 문자열 템플릿 사용도 가능하다.
- 3중 따옴표 문자열은 이스케이프를 할 수 없기 때문에 문자열 템플릿의 시작을 표현하는 '$'를 3중 따옴표 문자열 안에 넣을 수 없다는 문제가 생긴다.
- 만약 $를 넣어야 한다면 val price = """${'$'}99.9""" 처럼 문자열 템플릿 안에 $를 넣어야 한다.
728x90
'KotlinInAction > 함수 정의와 호출' 카테고리의 다른 글
| 로컬 함수와 확장 (0) | 2022.07.29 |
|---|---|
| 컬렉션 처리 (0) | 2022.07.28 |
| 확장 함수와 확장 프로퍼티 (0) | 2022.07.27 |
| 함수를 호출하기 쉽게 만들기 (0) | 2022.07.26 |
| 코틀린에서 컬랙션 만들기 (0) | 2022.07.26 |