hoon DevLog

Kotlin 코틀린 문자열 템플릿 및 기본 문자열 연산 본문

IT/Kotlin

Kotlin 코틀린 문자열 템플릿 및 기본 문자열 연산

개발한기발자 2024. 7. 31. 08:58
반응형


문자열 리터럴 정의

문자열 리터럴의 정의는 큰따옴표(")로 문자를 감싸는 것

val test = "Hello, world!"

문자열에 특수 문자가 들어가면 백슬래시(\) 뒤에 한 문자나 숫자 조합이 오는 문자 조합을 이루는

이스케이프 시퀀스(Escape Sequence)를 사용해야 함!

val text = "Hello, world!\nThis is \"multiline\" string"
// Hello, world!
// This is "multiline" string
println("\u03C0 \u2248 3.14") // π ≈ 3.14

문자열 템플릿

기본적으로 자바에서 사용하는 문자열과 비슷하나, 
코틀린은 여러 식에서 문자열을 합성해 내는 훨씬 강력한 방법을 지원한다.  

아래 코드는 이름을 입력받아, 개행 후 오늘 날짜를 출력한다.

import java.util.Date

fun main() {
    val name = readLine()
    println("Hello, ${name}!\nToday is {Date()}")
}

  • 기본적으로 ${} 의 중괄호 사이에 넣기만 하면 어떤 코틀린 식이든 문자열에 넣을 수 있다. 
  • 간단한 변수 참조인 경우 $name 같이 중괄호를 생략하고 달러($) 기호만 붙여도 된다. 
  • 이런 기능을 문자열 템플릿이라고 한다.  

로우 문자열(raw string)

  • 로우 문자열을 사용하면 이스케이프 시퀀스를 사용하지 않고도 문자열을 작성할 수 있다.
  • 이런 리터럴은 큰 따옴표 세 개로 둘러 싸여 있고, 새 줄 문자를 포함한 사용자가 입력한 문자를 포함할 수 있다. 
import java.util.Date

fun main() {
    val name = readLine()
    val message = """ Hello, $name,
    Today is${Date() } """.trimIndent()
    println(message)
}
  • trimIndent()는 여러줄에 공통된 최소 들여 쓰기를 제거해 주는 표준 코틀린 함수이다.
  • 로우 문자열에 특수문자를 추가하고 싶은 경우 ${} 안에 특수문자를 넣으면 된다.
  • JVM으로 컴파일 되는 애플리케이션에서 문자열은 JVM의 String클래스로 표현된다.
fun main() {
    val message = """This is triple quote : ' ${"\"\"\""} '""".trimIndent()
    // This is triple quote : ' """ '
}

length, lastIndex 프로퍼티

  • length : 모든 String 인스턴스는 문자열에 든 문자 수를 표현
  • lastIndex : 문자열의 마지막 문자 인덱스를 표현하는  프로퍼티를 제공
"Hello!".length     // 6
"Hello!".lastIndex  // 5 (첫번째 문자의 인덱스가 0 이므로)

[] 연산자로 개별문자 접근

  • [] 연산자에 인덱스를 넣어 개별문자에 접근하고, 인덱스는 0부터 시작!
  • 잘못된 인덱스를 넘기면 자바와 마찬가지로 StringIndexOutOfBoundsException 예외가 발생
 val s = "Hello! "
 println(s[0])  // H
 println(s[1])  // e
 println(s[5])  // !
 println(s[10]) // 잘못된 인덱스
  • 필자는 Java의 char 배열(char [])과 비슷한 맥락으로 이해했다!

두 문자 연결

  • + 연산자로 두 문자를 연결 가능
 val s = "The sum is : " + sum // "The sum is $sum" 으로 대체 가능

두 문자열 비교

  • 문자열은 == 와 != 를 사용해서 동등성 비교 가능
  • 이들 연산은 문자열의 내용을 비교하므로 문자의 순서와 같이 길이가 같으면 다른 객체의 인스턴스를 같은 문자열로 간주한다!!
 val s1 = "Hello!"
 val s2 = "Hel" + "lo!"
 println(s1 == s2) // ture
  • 참조동등성을 비교하려면 === 와 !== 연산자를 사용하면 된다.
  • <, >, <=, >= 같은 연산자를 사용해 문자열을 비교할 수 있다.
 println("abc" < "cba") // true
 println("123" > "34") // false
  • 문자열은 사전식 순서(오름차순)로 정렬되므로 정렬된 순서대로 커진다고 생각하면 된다!
  • 숫자 비교가 아닌 문자열 숫자("숫자")를 비교하는 것이므로 "34"가 더 나중에 정렬되므로 false

타입 변환 함수

  • 말 그대로 기존의 타입을 바꿔주는 함수로 to변환할 타입()으로 명명된다!
  • toByte(), toShort(), toInt(), toLong(), toFloat(), toDouble(), toBoolean()

기타 문자열 함수

  • isEmpty : 문자열이 비어있는지 검사
  • isNotEmpty : 문자열이 비어있지 않은지 검사
  • substring : 부분 문자열 추출
  • startsWith : 접두사(prefix) 검사
  • endsWith : 접미사(suffix) 검사
  • indexOf : 인자로 받은 문자나 문자열이 수신 객체인 문자열에 나타나는 첫번째 인덱스를 반환
println("Hello".isEmpty())         // "Hello" 문자열이 비어있는지 확인 (false 반환)
println("".isEmpty())              // 빈 문자열이 비어있는지 확인 (true 반환)
println("Hello".substring(2))      // "Hello" 문자열의 인덱스 2부터 끝까지 부분 문자열 반환 ("llo")
println("Hello".substring(1, 3))   // "Hello" 문자열의 인덱스 1부터 3 전까지 부분 문자열 반환 ("el")
println("Hello".startsWith("Hel")) // "Hello" 문자열이 "Hel"로 시작하는지 확인 (true 반환)
println("Hello".endsWith("lo"))    // "Hello" 문자열이 "lo"로 끝나는지 확인 (true 반환)
println("abcabc".indexOf('b'))     // "abcabc" 문자열에서 문자 'b'의 첫 번째 인덱스 반환 (1)
println("abcabc".indexOf("ca"))    // "abcabc" 문자열에서 문자열 "ca"의 첫 번째 인덱스 반환 (2)
println("abcabc".indexOf("cd"))    // "abcabc" 문자열에서 문자열 "cd"를 찾을 수 없으므로 -1 반환
println("abcabc".indexOf('b', 2))  // "abcabc" 문자열에서 인덱스 2부터 문자 'b'를 검색하여 첫 번째 인덱스 반환 (4)
println("abcabc".indexOf("ab", 2)) // "abcabc" 문자열에서 인덱스 2부터 문자열 "ab"를 검색하여 첫 번째 인덱스 반환 (3)

결과


뭔가 문법적으로 정확하게 딱딱 들어맞는 Java와 달리,

비교적 자유도가 높은 코틀린이 좀 더 편해 보이는 듯하다.

물론 아직 익숙지 않아 계속해서 코딩을 직접 하면서 익혀 나가야겠다!

 

언제나 새로운 정보 공유와 잘못된 정보

비판/지적/태클은 환영입니다!

도움이 되셨다면 공감♥️, 댓글 부탁드려요:)

끝.

728x90
반응형

'IT > Kotlin' 카테고리의 다른 글

Kotlin array 코틀린 배열 참조 및 사용 emptyArray arrayOf  (0) 2024.08.07
Kotlin 비교와 동등성  (5) 2023.09.14
Kotlin boolean 타입 및 비교 연산  (4) 2023.09.13
Kotlin char 문자 타입  (0) 2023.08.24
Kotlin 정수 타입  (2) 2023.08.14