Coding Memo
Kotlin 문자열 본문
Kotlin은 Java와 동일하게 문자열을 String 클래스로 사용한다.
마찬가지로 문자열에 대한 다양한 기본 함수들을 제공한다.
아래 링크는 String 클래스에 대한 공식 문서로, 속성과 함수들이 나와 있다.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/
참고: String 클래스의 Init() 내용이 없다.
문자열을 만들 때는 단순히 "" 안에 값을 넣으면 문자열이 된다.
Kotlin에서 문자열 만들 때 특이한 점은 html처럼 """ (큰 따옴표 3개)를 이용해서 안의 내용 그대로 문자열로 사용이 가능하다.
연산자 '+'를 이용하여 Java처럼 문자열을 이어 붙일 수 있다.
fun main() {
val a: String = "abcdefghijklmnopqrstuvwxyz"
val b: String =
"""
A
P
P
L
E
"""
val c: String = "I am "
val d: String = "a student"
println(a)
println(b)
println(c+d)
}
String 클래스 속성(Property) - length
공식 문서를 보면 String 클래스에는 기본 속성이 1개밖에 없지만 extension properties로 좀 더 있다.
(length, cstr, indices, lastIndex, utf16, utf32, utf8, wcstr)
속성이므로 함수로 취급해 '()'를 붙이지 말자.
이름만 봐도 알 수 있듯이 문자열의 길이를 Int 값으로 가지고 있다.
fun main() {
val a: String = "minttea25"
println(a.length)
}
String 관련 Functions
get
fun get(index: Int): Char
해당 인덱스에 있는 문자(Character)를 반환하는 함수이다.
fun main() {
val a: String = "minttea25"
println(a.get(5))
println(a[5]) //위와 같은 값을 나타내지만 위의 경우보다는 이 경우로 쓰자
}
참고: get을 사용하면 경고 문구가 나온다. (Should be replaced with indexing)
그냥 []로 쓰자.
subSequence
fun subSequence(startIndex: Int, endIndex: Int): CharSequence
서브 시퀀스를 반환하는 함수로 시작 인덱스와 끝 인덱스를 인자로 받는다.
(왜 단순히 반환 값이 String이 아니라 CharSequence라는 interface인지 궁금하다. 출력에는 특별한 점이 보이진 않는다.)
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-char-sequence/
fun main() {
val a: String = "minttea25"
println(a.subSequence(0, 7))
}
toLoserCase / toUpperCase
fun String.toLowerCase(locale: Locale): String
fun String.toUpperCase(locale: Locale): String
문자열을 모두 소문자/대문자로 바꾸어 반환해주는 함수이다.
fun main() {
val a: String = "Kotlin.Java.Python"
println(a.toLowerCase())
println(a.toUpperCase())
}
joinToString
joinToString()
joinToString(문자열)
String 클래스에서만 제공하는 함수는 아니고 Collections에서 제공하는 함수이다.
Collections에 있는 값(문자열)들을 합쳐서 반환한다.
인자로 문자열(separator)을 넣으면 Collections에 있는 값 사이에 그 문자열을 넣고 합쳐서 반환한다.
fun main() {
val a: List<String> = listOf("Apple", "is", "fruit")
println(a.joinToString())
println(a.joinToString(" "))
}
substring
fun String.substring(startIndex: Int)
fun String.subIndex(startIndex: Int, endIndex: Int)
fun String.substring(range: IntRange): String
subSequence랑 비슷하나 인자로 IntRange 타입을 사용할 수 있다.
IntRange 타입은 for문에서 했었던 반복 횟수로 지정했던 타입이다.
(시작값) .. (끝 값)
시작 값의 인덱스에서 끝 값의 인덱스 사이의 문자열을 반환한다. (마지막 인덱스를 포함하지 않음)
startIndex만 넣을 경우 문자열 끝의 인덱스까지 포함한 문자열을 반환한다.
fun main() {
val a: String = "VideoGame"
println(a.substring(1, 5))
println(a.substring(1))
println(a.substring(1..5))
}
split
fun CharSequence.split()
인자로 받은 문자열(구분자, delimiters) 또는 정규식으로 쪼개서 List<> 형태로 반환한다.
이 함수도 Java와 동일한 기능을 수행을 한다. 다만, 인자에 반드시 정규식이 있을 필요는 없다.
fun main() {
val a: String = "Kotlin.Java.Python"
for (n in a.split(".")) {
println(n)
}
}
empty, blank, null
문자열이 empty, blank, null 일 때 관련한 다양한 함수들이 있다.
empty: 어떠한 문자도 포함하지 않음
blank: 오로지 공백 문자(space, tab, line feed, carriage return)만을 포함하거나 empty 임
null: null값
definition | explanation | |
isBlank | fun CharSequence.isBlank(): Boolean | 문자열이 blank면 true 반환 |
isEmpty | fun CharSequence.isEmpty(): Boolean | 문자열이 empty면 true 반환 |
isNotBlank | fun CharSequence.isNotBlank(): Boolean | 문자열이 blank가 아니라면 true 반환 |
isNotEmpty | fun CharSequence.isNotEmpty(): Boolean | 문자열이 empty가 아니라면 true 반환 |
isNullOrBlank | fun CharSequence?.isNullOrBlank(): Boolean | 문자열이 null이거나 blank일 경우 true 반환 |
isNullOrEmpty | fun CharSequence?.isNullOrEmpty(): Boolean | 문자열이 null이거나 empty일 경우 true 반환 |
fun main() {
val arr:Array<String?> = arrayOf(null, "", " ", "\n", "1")
for (n in arr) {
println("$n")
println("isBlank(): ${n?.isBlank()}")
println("isEmpty(): ${n?.isEmpty()}")
println("isNullOrBlank(): ${n.isNullOrBlank()}")
println("isNullOrEmpty(): ${n.isNullOrEmpty()}")
println()
}
}
"\n"과 " "는 같은 결과인 것을 확인할 수 있다.
참고: isNull() 함수는 있을 거 같지만 없다.
null 인지 확인하는 방법은 따로 있다. (?:, ?., !!.)
예시 구문에서도 null 값을 처리해주기 위해 사용했는데 아래 글을 참고하자.
(링크, 아직 미작성...)
startsWith / endsWith
fun CharSequence.startsWith(char: Char, ignoreCase: Boolean = false): Boolean
fun CharSequence.startsWith(prefix: CharSequence, ignoreCase: Boolean = false): Boolean
fun CharSequence.startsWith(prefix: CharSequence, startIndex: Int, ignoreCase: Boolean = false): Boolean
fun CharSequence.endsWith(char: Char, ignoreCase: Boolean = false): Boolean
fun CharSequence.endsWith(suffix: CharSequence, ignoreCase: Boolean = false): Boolean
인자로 받은 문자열로 시작하는지, 끝나는지 확인할 수 있는 함수이다.
fun main() {
val a: String = "www.google.com"
println(a.startsWith("www"))
println(a.endsWith("com"))
}
참고: 인자에 있는 '='는 따로 값 지정 없을 시에 대입되는 default 값이다.
contains
operator fun CharSequence.contains(other: CharSequence, ignoreCase: Boolean = false): Boolean
operator fun CharSequence.contains(char: Char, ignoreCase: Boolean = false): Boolean
operator fun CharSequence.continas(regex: Regex): Boolean
해당 문자열이 포함되어있거나 정규식에 맞는 시퀀스가 있으면 true 반환
fun main() {
val a: String = "www.google.com"
println(a.contains("google"))
println(a.contains(Regex(".([a-zA-Z0-9]+).")))
}
drop
fun String.drop(n: Int): String
n 번째에 있는 문자까지 지운 문자열을 반환한다.
(주의: index가 아니라 n번째이다! 따라서 1, 2, 3, ...로 시작한다.)
fun main() {
var a: String = "ABC"
println(a.drop(2))
}
만약 0을 인자로 한다면?
fun main() {
var a: String = "ABC"
println(a.drop(0))
}
만약 음수 값을 인자로 한다면?
-> IllegalArgumentException 발생
만약 문자열의 길이 이상의 값을 인자로 한다면?
-> 단지 모든 문자열이 지워지고 빈 문자열이 반환됨
나중에 String과 CharSequence의 차이점이 있다면 알아보고 두 가지를 구분해서 함수를 분류해서 정리하면 좋을 것 같다.
'Language > Kotlin' 카테고리의 다른 글
Kotlin 제네릭 (0) | 2021.01.06 |
---|---|
Kotlin 캐스팅 (0) | 2021.01.06 |
Kotlin 옵저버 패턴 (0) | 2021.01.03 |
Kotlin 오브젝트 (0) | 2021.01.03 |
Kotlin 스코프 함수 (0) | 2021.01.02 |