Szukaj…
Elementy sznurka
Elementy ciągu to znaki, do których można uzyskać dostęp poprzez string[index]
operacji indeksowania string[index]
.
val str = "Hello, World!"
println(str[1]) // Prints e
Elementy ciągów można iterować za pomocą pętli for.
for (c in str) {
println(c)
}
Literały smyczkowe
Kotlin ma dwa rodzaje literałów łańcuchowych:
- Ciąg znaków ucieczki
- Surowy sznurek
Ciąg znaków Escaped obsługuje znaki specjalne, unikając ich. Ucieczka odbywa się za pomocą odwrotnego ukośnika. Obsługiwane są następujące sekwencje specjalne: \t
, \b
, \n
, \r
, \'
, \"
, \\
i \$
. Aby zakodować dowolny inny znak, użyj składni sekwencji unikowej Unicode: \uFF00
.
val s = "Hello, world!\n"
Nieprzetworzony ciąg rozdzielany potrójnym cytatem """
nie zawiera znaków zmiany znaczenia i może zawierać znaki nowej linii oraz wszelkie inne znaki
val text = """
for (c in "foo")
print(c)
"""
Wiodące białe znaki można usunąć za pomocą funkcji trimMargin () .
val text = """
|Tell me and I forget.
|Teach me and I remember.
|Involve me and I learn.
|(Benjamin Franklin)
""".trimMargin()
Domyślny prefiks marginesu to znak potoku |
, można to ustawić jako parametr trimMargin; np. trimMargin(">")
.
Szablony ciągów
Zarówno łańcuchy ucieczki, jak i łańcuchy surowe mogą zawierać wyrażenia szablonów. Wyrażenie szablonu jest fragmentem kodu, który jest analizowany, a jego wynik jest łączony w łańcuch. Zaczyna się od znaku dolara $
i składa się z nazwy zmiennej:
val i = 10
val s = "i = $i" // evaluates to "i = 10"
Lub dowolne wyrażenie w nawiasach klamrowych:
val s = "abc"
val str = "$s.length is ${s.length}" // evaluates to "abc.length is 3"
Aby dołączyć dosłowny znak dolara do ciągu, użyj znaku ukośnika odwrotnego:
val str = "\$foo" // evaluates to "$foo"
Wyjątkiem są ciągi surowe, które nie obsługują ucieczki. W nieprzetworzonych ciągach znaków można użyć następującej składni do przedstawienia znaku dolara.
val price = """
${'$'}9.99
"""
Równość ciągów
W Kotlinie ciągi są porównywane z operatorem ==
, który sprawdza ich strukturalną równość.
val str1 = "Hello, World!"
val str2 = "Hello," + " World!"
println(str1 == str2) // Prints true
Równość referencyjna jest sprawdzana za pomocą operatora ===
.
val str1 = """
|Hello, World!
""".trimMargin()
val str2 = """
#Hello, World!
""".trimMargin("#")
val str3 = str1
println(str1 == str2) // Prints true
println(str1 === str2) // Prints false
println(str1 === str3) // Prints true