W tym artykule za pomocą przykładów dowiesz się o łańcuchach Kotlin, szablonach ciągów oraz kilku powszechnie używanych właściwościach i funkcjach ciągów.
Kotlin String
Łańcuchy to ciąg znaków. Na przykład "Hello there!"
to literał ciągu.
W Kotlinie wszystkie łańcuchy są obiektami String
klasy. Oznacza to, że literały łańcuchowe, takie jak, "Hello there!"
są implementowane jako wystąpienia tej klasy.
Jak stworzyć zmienną typu String?
Oto jak możesz zdefiniować String
zmienną w Kotlinie. Na przykład,
val myString = "Hej!"
Tutaj myString jest zmienną typu String
.
Możesz zadeklarować zmienną typu String
i określić jej typ w jednej instrukcji, a następnie zainicjować zmienną w innej instrukcji w dalszej części programu.
val myString: String… myString = "Howdy"
Jak uzyskać dostęp do znaków ciągu?
Aby uzyskać dostęp do elementów (znaku) ciągu, używany jest operator dostępu do indeksu. Na przykład,
val myString = "Hej!" val item = myString (2)
Tutaj zmienna item zawiera y, trzeci znak ciągu myString. To dlatego, że indeksowanie w Kotlinie zaczyna się od 0, a nie od 1.
val myString = "Hej!" var item: Char item = myString (0) // pozycja zawiera 'H' item = myString (9) // pozycja zawiera '!' item = myString (10) // Błąd! Indeks ciągu jest poza zakresem item = myString (-1) // Błąd! Indeks ciągu jest poza zakresem
Przykład: Iteracja przez String
Jeśli potrzebujesz iterować po elementach łańcucha, możesz to łatwo zrobić, używając pętli for.
fun main(args: Array) ( val myString = "Hey!" for (item in myString) ( println(item) ) )
Po uruchomieniu programu wynik będzie następujący:
H e y !
Ciągi w Kotlinie są niezmienne
Podobnie jak w Javie, w Kotlinie ciągi znaków są niezmienne. Oznacza to, że nie możesz zmienić pojedynczego znaku w ciągu. Na przykład,
var myString = "Hej!" myString (0) = 'h' // Błąd! Smyczki
Możesz jednak ponownie przypisać zmienną łańcuchową, jeśli zadeklarujesz zmienną za pomocą słowa kluczowego var
. ( Zalecana literatura : Kotlin var Vs val)
Przykład: ponowne przypisanie zmiennej łańcuchowej.
fun main(args: Array) ( var myString = "Hey!" println("myString = $myString") myString = "Hello!" println("myString = $myString") )
Po uruchomieniu programu wynik będzie następujący:
myString = Hej! myString = Witaj!
Literały strunowe
Literał to reprezentacja stałej wartości w kodzie źródłowym. Na przykład "Hey there!"
to literał łańcuchowy, który pojawia się bezpośrednio w programie bez konieczności obliczania (podobnie jak zmienne).
W Kotlinie istnieją dwa typy literałów ciągów:
1. Escaped string
Ciąg znaków ze zmianą znaczenia może zawierać znaki ucieczki. Na przykład,
val myString = "Hej! n"
Tutaj jest znak ucieczki, który wstawia nowy wiersz w tekście, w którym się pojawia.
Oto lista znaków ucieczki obsługiwanych w Kotlin:
- Wstawia backspace
- Wstawia znak nowej linii
- Wstawia powrót karetki
\'
- Wstawia pojedynczy znak cudzysłowu"
- Wstawia znak podwójnego cudzysłowu\
- Wstawia ukośnik odwrotny$
- Wstawia znak dolara
2. Surowy ciąg
Nieprzetworzony ciąg może zawierać znaki nowej linii (nie znak zmiany znaczenia nowego wiersza) i dowolny tekst. Nieprzetworzony ciąg jest oddzielony potrójnym cudzysłowem """
. Na przykład,
fun main(args: Array) ( val myString = """ for (character in "Hey!") println(character) """ print(myString) )
Po uruchomieniu programu wynik będzie następujący:
for (znak w "Hej!") println (znak)
Możesz usunąć wiodące białe znaki z nieprzetworzonego ciągu za pomocą funkcji trimMargin (). Na przykład,
Przykład: drukowanie nieprzetworzonego ciągu
fun main(args: Array) ( println("Output without using trimMargin function:") val myString = """ |Kotlin is interesting. |Kotlin is sponsored and developed by JetBrains. """ println(myString) println("Output using trimMargin function:") println(myString.trimMargin()) )
Po uruchomieniu programu wynik będzie następujący:
Wyjście bez użycia funkcji trimMargin: | Kotlin jest interesujący. | Kotlin jest sponsorowany i rozwijany przez JetBrains. Wyjście za pomocą funkcji trimMargin: Kotlin jest interesujący. Kotlin jest sponsorowany i rozwijany przez JetBrains.
Domyślnie trimMargin()
funkcja używa | jako przedrostek marginesu. Możesz go jednak zmienić, przekazując nowy ciąg do tej funkcji.
Przykład: trimMargin () with Argument
fun main(args: Array) ( val myString = """ !!! Kotlin is interesting. !!! Kotlin is sponsored and developed by JetBrains. """ println(myString.trimMargin("!!! ")) )
Po uruchomieniu programu wynik będzie następujący:
Kotlin jest interesujący. Kotlin jest sponsorowany i rozwijany przez JetBrains.
Kotlin String Templates
Kotlin has an awesome feature called string templates that allows strings to contain template expressions.
A string template expression starts with a dollar sign $
. Here are few examples:
Example: Kotlin String Template
fun main(args: Array) ( val myInt = 5; val myString = "myInt = $myInt" println(myString) )
When you run the program, the output will be:
myInt = 5
It is because the expression $myInt (expression starting with $ sign) inside the string is evaluated and concatenated into the string.
Example: String Template With Raw String
fun main(args: Array) ( val a = 5 val b = 6 val myString = """ |$(if (a> b) a else b) """ println("Larger number is: $(myString.trimMargin())") )
When you run the program, the output will be:
Larger number is: 6
Few String Properties and Functions
Since literals in Kotlin are implemented as instances of String
class, you can use several methods and properties of this class.
length
property - returns the length of character sequence of an string.compareTo
function - compares this String (object) with the specified object. Returns 0 if the object is equal to the specfied object.get
function - returns character at the specified index.
You can use index access operator instead ofget
function as index access operator internally callsget
function.plus
function - returns a new string which is obtained by the concatenation of this string and the string passed to this function.
You can use+
operator instead ofplus
function as+
operator callsplus
function under the hood.subSequence
Function - returns a new character sequence starting at the specified start and end index.
Example: String Properties and Function
fun main(args: Array) ( val s1 = "Hey there!" val s2 = "Hey there!" var result: String println("Length of s1 string is $(s1.length).") result = if (s1.compareTo(s2) == 0) "equal" else "not equal" println("Strings s1 and s2 are $result.") // s1.get(2) is equivalent to s1(2) println("Third character is $(s1.get(2)).") result = s1.plus(" How are you?") // result = s1 + " How are you?" println("result = $result") println("Substring is "$(s1.subSequence(4, 7)) "") )
When you run the program, the output is:
Długość łańcucha s1 wynosi 10. Łańcuchy s1 i s2 są równe. Trzeci znak to y. wynik = Hej! Jak się masz? Podciąg to „the”
Odwiedź klasę Kotlin String, aby uzyskać więcej informacji na temat właściwości rozszerzenia, rozszerzenia, funkcji i konstruktorów.