출처 : https://kotlinlang.org/docs/characters.html, https://kotlinlang.org/docs/strings.html
문자 (Characters)
문자는 Char 타입으로 표현 할 수 있다. 값은 작은 따옴표(')를 이용해 할당한다.
val a = 'a'
특수문자
- \t : tab
- \b : backspace
- \n : new line (LF)
- \r : carriage return (CR)
- \' : 작은 따옴표 (')
- \" : 큰 따옴표 (")
- \\ : backslash
- \$ : $
- \u : Unicode로 인코딩 하는 경우 (예 : '\uFF21')
문자가 숫자 인 경우 digitToInt() 함수를 이용해서 Int 타입으로 변경 할 수 있다.
val c: Char = 'a'
println(c.digitToInt()) // Error - Char a is not a decimal digit
var d: Char = '1'
println(d.digitToInt()) // 1
문자열 (Strings)
문자열의 문자를 (문자열을 배열로 간주해서) 인덱스를 통해 접근 할 수 있다. for문 에서도 in 연산자로 문자열의 각 문자를 순회 할 수 있다.
val str: String = "abcd 123"
for (c in str) {
println(c)
}
String은 불변 객체이기 때문에 한번 값이 할당되면 값을 바꾸거나 새로운 값으로 변경 할 수 없다. 따라서 문자열의 형태가 변경되는 기능들은 실제로 문자열을 변경하는 것이 아니라 새로운 String 객체를 생성해서 반환 하는 것 이다.
val str = "abcd"
println(str.uppercase()) // 새로운 String 객체를 생성한다.
// ABCD
println(str)
// abcd
문자열을 병합 할때는 + 연산자를 사용한다. 첫번째 인자가 문자열 인 경우 두번째 인자가 문자열이 아니더라도 문자열로 병합된다.
val s = "abc" + 1
println (s + "def")
// abc1def
String literals
Kotlin은 2종류의 문자열 리터럴이 존재한다.
Escaped strings
escaped(\) 문자를 포함 할 수 있다.
val s = "Hello, world!\n"
Multiline strings
3중 쌍따옴표를 사용하고 escaped 문자가 포함되지 않는다.
val text = """
for (c in "Python")
\t
eeee
\n
aaaa
"""
/*
for (c in "Python")
\t
eeee
\n
aaaa
*/
multiline strings 리터럴은 3중 따옴표 내부의 문자를 그대로 인식하기때문에 의도치 않게 들여쓰기까지 인식 된다.
이를 해결하기 위해 trimMargin() 함수를 이용하는데, 이는 약속된 심볼을 마진 경계선으로 인식해서 그 앞쪽의 공백들을 정리 해 주는 기능을 한다. 함수의 파라미터로 마진 경계를 표시하는 심볼을 지정 할 수도 있다. (아래 예제의 마지막 text2.trimMargin(">") 참고)
val text = """
|Tell me and I forget.
|Teach me and I remember.
|Involve me and I learn.
(Benjamin Franklin)
"""
println(text)
/*
|Tell me and I forget.
|Teach me and I remember.
|Involve me and I learn.
(Benjamin Franklin)
*/
println(text.trimMargin())
/*
Tell me and I forget.
Teach me and I remember.
Involve me and I learn.
(Benjamin Franklin)
*/
val text2 = """
>Tell me and I forget.
>Teach me and I remember.
>Involve me and I learn.
>(Benjamin Franklin)
"""
println(text2.trimMargin(">"))
/*
Tell me and I forget.
Teach me and I remember.
Involve me and I learn.
(Benjamin Franklin)
*/
문자열 템플릿 (String templates)
문자열 리터럴은 $변수, ${표현식} 형태의 템플릿 표현식을 허용한다.
val i = 10
println("i = $i") // i = 10
val s = "abc"
println($s.length is ${s.length}) // abc.length is 3
문자열 안에서 달러표시($)를 사용하려면 아래와 같은 방식을 사용하면 된다.
val price1 = "\$_99.9"
println(price1)
val price2 = """
${'$'}_99.9
"""
println(price2)
문자열 포매팅 (String formatting)
String.format() 함수는 Kotlin/JVM 에서만 가능하다.
String.format() 함수는 형식(format) 문자열과 하나 이상의 인자 값을 받는다. 형식 문자열은 인자당 한개씩의 placeholder(%)를 포함한다. placeholder 정의는 java의 Formatter를 참고한다.
// Formats to add zeroes and make a length of seven
val integerNumber = String.format("%07d", 31416)
println(integerNumber)
// 0031416
// Formats with four decimals and sign
val floatNumber = String.format("%+.4f", 3.141592)
println(floatNumber)
// +3.1416
// Formats with uppercase for two placeholders
val helloString = String.format("%S %S", "hello", "world")
println(helloString)
// HELLO WORLD
String.format() 함수는 문자열 템플릿과 유사하지만, 더 다양한 서식 옵션을 제공 하기 때문에 더 유용하게 사용 된다.
그리고 형식 문자열을 변수 처리 해서 상황에 맞게 형식을 손쉽게 변경 할 수도 있다.
'Kotlin' 카테고리의 다른 글
Kotlin - 반복문(for, while) (0) | 2024.01.10 |
---|---|
Kotlin - 조건문 (2) | 2024.01.07 |
Kotlin - 타입체크와 형 변환 (0) | 2024.01.06 |
Kotlin - 데이터 타입 (배열) (0) | 2024.01.01 |
Kotlin - 데이터 타입 (숫자, Boolean) (2) | 2023.12.30 |