Các hàm xử lý chuỗi (String) trong Kotlin

22/09/2022 - lượt xem
Chia sẻ
 
Rate this post

Trong những bài trước chúng ta đã tìm hiểu các cú pháp cơ bản trong lập trình Kotlin. Với Kotlin, các cấu trúc điều khiển if else, vòng lặp for, while, do white.. cũng tương tự như với ngôn ngữ lập trình khác. Trong bài viết này hướng dẫn các bạn về các hàm xử lý chuỗi – xử lý String trong lập trình Kotlin.

Các bạn có thể tham khảo về Kotlin là gì? nếu bạn là người mới bắt đầu với Kotlin. Hoặc tìm hiểu về các cú pháp cơ bản trong lập trình Kotlin.

Mục lục

Chuỗi – String trong Kotlin là gì?

Lớp String đại diện cho các chuỗi ký tự. Tất cả các ký tự chuỗi trong lập trình Kotlin, chẳng hạn như “abc”, được triển khai dưới dạng các thể hiện của lớp này.

Để tìm hiểu chi tiết về cách làm việc với chuỗi String trong Kotlin bạn cũng có thể tham khảo bài viết https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/ 

Ngoài việc xử lý chuỗi, xử lý mảng trong Kotlin là nội dung bạn cũng cần tìm hiểu thêm nếu muốn làm tốt với Kotlin.

Thuộc tính của chuỗi – String trong Kotlin

Như trên website chính thức của ngôn ngữ Kotlin, thì String có thuộc tính length với nhiệm vụ trả về độ dài của chuỗi.

val length: Int

Các hàm xử lý chuỗi của Kotlin

Hàm compareTo trong Kotlin dùng như thế nào?

Trong Kotlin, Hàm compareTo dùng để so sánh đối tượng này với đối tượng khác. Kết quả trả về bằng 0 nếu 2 đối tượng bằng nhau. Kết quả là một số âm nếu đối tượng hiện tại nhỏ hơn đối tượng so sánh và ngược lại kết quả là một số dương nếu đối tượng hiện tại lớn hơn đối tượng so sánh.

fun compareTo(other: String): Int

Hàm equals

fun equals(other: Any?): Boolean

Hàm equals dùng để kiểm tra 2 đối tượng có bằng nhau hay không? Việc kiểm tra bằng nhau này cần đáp ứng 1 số tính chất như sau:

Tính phản xạ: Đối với bất kỳ giá trị x nào khác NULL thì kết quả của x.equals (x) phải trả về true.

Tính đối xứng: Đối với bất kỳ giá trị x và y thì x.equals (y) sẽ trả về true khi và chỉ khi y.equals (x) trả về true.

Tính bắc cầu: Đối với bất kỳ giá trị nào khác null x, y và z, nếu x.equals (y) trả về truey.equals (z) trả về true, thì x.equals (z) sẽ trả về true.

Tính bền vứng: Đối với bất kỳ giá trị nào khác null x và y, các lệnh gọi x.equals(y) luôn trả về true hoặc luôn trả về false miến là không có thông tin nào được sử dụng giữa các phép so sánh đó.

Khác null: Đối với bất kỳ giá x khác null thì x.equals(null) luôn luôn trả về false.

Hàm get – hàm lấy ký tự tại vị trí index trong 1 chuỗi

fun get(index: Int): Char

Hàm get trả về ký tự của 1 chuỗi tại vị trí Index. Kiểu dữ liệu trả về là Char

Hàm hashCode – lấy hash code của 1 đối tượng trong Kotlin

fun hashCode(): Int

Trả về hashCode của 1 đối tượng object.

Hàm hashCode bất kì khi nào được gọi, nếu trên cùng một đối tượng, dù là bao nhiêu lần, hashCode phải luôn trả về cùng một số nguyên, miễn là không có hành động nào làm thay đổi đối tượng trước đó.

Nếu hai đối tượng bằng nhau theo khi kiểm tra bằng hàm equals(), thì việc gọi hashCode trên mỗi đối tượng đó đều trả về kết quả giống nhau

Hàm plus – hàm cộng chuỗi Kotlin

operator fun plus(other: Any?): String

Hàm plus cho phép nối chuỗi hiện tại với chuỗi được truyền vào. Kết quả trả về là chuỗi đã được nối.

Hàm subSequence trong Kotlin – Hàm cắt chuỗi con trong Kotlin

fun subSequence(startIndex: Int, endIndex: Int): CharSequence

Hàm subSequence trả về một chuỗi ký tự mới là một dãy con của chuỗi ký tự hiện tại. Chuỗi mới được cắt từ chuỗi hiện tại từ startIndex và kết thúc ngay trước endIndex.

Trong đó

startIndex: Vị trí bắt đầu cắt chuỗi

endIndex: Vị trí kết thúc chuỗi

Hàm toString Kotlin

fun toString(): String

Hàm trả về giá trịnh String của đối tượng hiện tại

Các thuộc tính mở rộng của String trong Kotlin

Thuộc tính indices của chuỗi

val CharSequence.indices: IntRange

Thuộc tính này trả về 1 khoảng (mảng) chỉ số (index) hợp lệ của 1 chuỗi ký tự.

Thuộc tính lastIndex

val CharSequence.lastIndex: Int

Thuộc tính lastIndex trả về chỉ số của ký tự cuối cùng trong chuỗi ký tự hoặc -1 nếu ký tự đó rỗng.

Các hàm mở rộng của chuỗi String trong Kotlin

Hàm all trong xử lý chuỗi Kotlin – kiểm tra chuỗi có điều kiện

inline fun CharSequence.all(
    predicate: (Char) -> Boolean
): Boolean

Hàm all trả về true nếu tất cả các ký tự của chuỗi đều thỏa mãn điều kiện cho vào. Xem thêm ví dụ sau:

val isEven: (Int) -> Boolean = { it % 2 == 0 }
val zeroToTen = 0..10
println("zeroToTen.all { isEven(it) } is ${zeroToTen.all { isEven(it) }}") // false
println("zeroToTen.all(isEven) is ${zeroToTen.all(isEven)}") // false

val evens = zeroToTen.map { it * 2 }
println("evens.all { isEven(it) } is ${evens.all { isEven(it) }}") // true

val emptyList = emptyList<Int>()
println("emptyList.all { false } is ${emptyList.all { false }}") // true

Hàm any trong String Kotlin

Hàm  này sẽ trả về True nếu chuỗi có ít nhất 1 ký tự

fun CharSequence.any(): Boolean
val emptyList = emptyList<Int>()
println("emptyList.any() is ${emptyList.any()}") // false

val nonEmptyList = listOf(1, 2, 3)
println("nonEmptyList.any() is ${nonEmptyList.any()}") // true

Một biến thể khác của hàm any

inline fun CharSequence.any(
    predicate: (Char) -> Boolean
): Boolean

Hàm any trả về True nếu ít nhất 1 ký tự thỏa mãn điều kiện truyền vào.

val isEven: (Int) -> Boolean = { it % 2 == 0 }
val zeroToTen = 0..10
println("zeroToTen.any { isEven(it) } is ${zeroToTen.any { isEven(it) }}") // true
println("zeroToTen.any(isEven) is ${zeroToTen.any(isEven)}") // true

val odds = zeroToTen.map { it * 2 + 1 }
println("odds.any { isEven(it) } is ${odds.any { isEven(it) }}") // false

val emptyList = emptyList<Int>()
println("emptyList.any { true } is ${emptyList.any { true }}") // false

Hàm capitalize trong Kotlin

Hàm capitalize trả về bản sao của chuỗi hiện tại, chuỗi này sẽ có chữ cái đầu tiên được viết hoa

@DeprecatedSinceKotlin("1.5") fun String.capitalize(): String

Tuy nhiên trong phiên bản hiện tại hàm capitalize đã bị Deprecated và thay thế bằng hàm replaceFirstChar

println("abcd".capitalize()) // Abcd
println("Abcd".capitalize()) // Abcd

Hàm concat

@DeprecatedSinceKotlin("1.6") fun String.concat(
    str: String
): String

Hàm concat dùng để nối chuỗi hiện tại với chuỗi được truyền vào. Tuy nhiên hàm concat đã bị deprecate thay thế bằng hàm plus.

Hàm contains

operator fun CharSequence.contains(
    other: CharSequence,
    ignoreCase: Boolean = false
): Boolean
operator fun CharSequence.contains(
    char: Char,
    ignoreCase: Boolean = false
): Boolean
operator fun CharSequence.contains(regex: Regex): Boolean

Hàm contains trả về true nếu chuỗi ký tự này chứa chuỗi ký tự được truyền vào dưới dạng chuỗi con.

Tham số ignoreCase mặc định là false, nghĩa là không phân biệt chữ hoa chữ thường giữa 2 chuỗi.

Hàm count string

fun CharSequence.count(): Int

Hàm count trả về độ dài của chuỗi kí tự hiện tại.

Ngoài ra hàm count có một nạp chồng khác

inline fun CharSequence.count(
    predicate: (Char) -> Boolean
): Int

Khi đó hàm count sẽ trả về số lượng ký tự thỏa mãn điều kiện predicate.

Hàm endsWith – hàm kiểm tra chuỗi có kết thúc bởi một ký tự

fun String.endsWith(
    suffix: String,
    ignoreCase: Boolean = false
): Boolean

Hàm endsWith sẽ trả về true nếu chuỗi này kết thúc bằng chuỗi được truyền vào.

fun CharSequence.endsWith(
    char: Char,
    ignoreCase: Boolean = false
): Boolean

Với hàm endsWith nạp chồng này, thì kết quả trả về true nếu chuỗi ký tự này kết thúc bằng ký tự được chỉ định.

fun CharSequence.endsWith(
    suffix: CharSequence,
    ignoreCase: Boolean = false
): Boolean

Hàm filter – hàm lọc chuỗi

inline fun CharSequence.filter(
    predicate: (Char) -> Boolean
): CharSequence

Hàm filter trong Kotlin sẽ trả về một chuỗi ký tự chỉ chứa các ký tự từ chuỗi ký tự gốc phù hợp với điều kiện đã cho.

val text = "a1b2c3d4e5"

val textWithOnlyDigits = text.filter { it.isDigit() }

println(textWithOnlyDigits) // 12345

Biến thể khác của hàm filter

inline fun String.filter(
    predicate: (Char) -> Boolean
): String

Trả về một chuỗi chỉ chứa các ký tự phù hợp hàm điều kiện đã cho.

val text = "a1b2c3d4e5"

val textWithOnlyDigits = text.filter { it.isDigit() }

println(textWithOnlyDigits) // 12345

Hàm find chuỗi Kotlin

inline fun CharSequence.find(
    predicate: (Char) -> Boolean
): Char?

Trả về ký tự đầu tiên phù hợp với điều kiện đã cho hoặc null nếu không tìm thấy ký tự nào như vậy.

val numbers = listOf(1, 2, 3, 4, 5, 6, 7)
val firstOdd = numbers.find { it % 2 != 0 }
val lastEven = numbers.findLast { it % 2 == 0 }

println(firstOdd) // 1
println(lastEven) // 6

Hàm first

fun CharSequence.first(): Char

Hàm first trả về kí tự đầu tiên của chuỗi

Hàm này sẽ ném ra ngoại lệ NoSuchElementException trong trường hợp chuỗi kí tự rỗng.

Hàm format chuỗi trong Kotlin

Hàm format chuỗi là 1 trong các hàm hay được sử dụng trong nhiều ngôn ngữ lập trình. Hàm format string mang lại sự tiện lợi nhất định thay vì cộng nhiều chuỗi ngắn lại với nhau.

fun String.format(vararg args: Any?): String

Chuỗi hiện tại chứa các định dạng, sau khi qua hàm format, chuỗi trả về là chuỗi đã được thay thế các đối số được chỉ định.

fun String.Companion.format(
    format: String,
    vararg args: Any?
): String

Một biến thể khác của hàm format, với hàm này thì sẽ định dạng 1 chuỗi String truyền vào thay vì đối tượng String hiện tại.

Hàm indexOf – hàm lấy vị trí của ký tự trong chuỗi

fun CharSequence.indexOf(
    char: Char,
    startIndex: Int = 0,
    ignoreCase: Boolean = false
): Int

Hàm indexOf trả về vị trí đầu tiên của ký tự truyền vào trong chuỗi hiện tại, được tính từ vị trí startIndex

Hàm này có 3 tham số truyền vào

char: là ký tự cần xác định vị trí

startIndex: bắt đầu từ index nào trong chuỗi, mặc định là 0

ignoreCase: có phân biệt chữ hoa chữ thường hay không, mặc định là false

Kết quả trả về là giá trị index của ký tự, hoặc trả về -1 nếu không tìm thấy

Hàm isEmpty – hàm kiểm tra chuỗi rỗng

fun CharSequence.isEmpty(): Boolean

Hàm isEmpty trả về true nếu chuỗi ký tự này rỗng (không chứa ký tự).

fun markdownLink(title: String, url: String) =
    if (title.isEmpty()) url else "[$title]($url)"

// plain link
println(markdownLink(title = "", url = "https://kotlinlang.org")) // https://kotlinlang.org

// link with custom title
println(markdownLink(title = "Kotlin Language", url = "https://kotlinlang.org")) // [Kotlin Language](https://kotlinlang.org)

Hàm isNotBlank – hàm kiểm tra chuỗi khác rỗng

fun CharSequence.isNotBlank(): Boolean

Hàm isNotBlank trả về true nếu chuỗi ký tự này không trống và chứa một số ký tự ngoại trừ các ký tự khoảng trắng.

fun validateName(name: String): String {
    require(name.isNotBlank()) { "Name cannot be blank" }
    return name
}

println(validateName("Adam")) // Adam
// validateName("") //  will fail
// validateName("  \t\n") //  will fail

Hàm lastIndexOf

fun CharSequence.lastIndexOf(
    char: Char,
    startIndex: Int = lastIndex,
    ignoreCase: Boolean = false
): Int

Hàm lastIndexOf trả về vị trí xuất hiện cuối cùng của char trong chuỗi ký tự hiện tại, bắt đầu từ startIndex được chỉ định.

Hàm lastIndexOf có 3 tham số

char: Kí tự cần xác định vị trí

startIndex: vị trí bắt đầu để tìm kiếm char

ignoreCase: cờ cho biết tìm kiếm có phân biệt hoa thường hay không, mặc định là false.

Kết quả trả về là vị trí của char trong chuỗi hiện tại, hoặc là -1 nếu không tìm thấy kí tự đó

Hàm lowercase – hàm chuyển ký tự thường trong Kotlin

fun Char.lowercase(): String

Chuyển đổi ký tự hiện tại thành chữ thường theo quy tắc ánh xạ Unicode.

Hàm này hỗ trợ ánh xạ một đến nhiều ký tự, do đó độ dài của chuỗi trả về có thể lớn hơn chuỗi đầu vào. ví dụ ‘\u0130’.lowercase() có kết quả là “\u0069\u0307”, trong đó ‘\u0130’ là ký tự latin viết hoa với dấu nặng trên đầu (chữ İ). Nếu 1 chuỗi mà không có ánh xạ chữ thường, thì kết quả từ toString của ký tự đó sẽ được trả về.

val chars = listOf('A', 'Ω', '1', 'a', '+', 'İ')
val lowercaseChar = chars.map { it.lowercaseChar() }
val lowercase = chars.map { it.lowercase() }
println(lowercaseChar) // [a, ω, 1, a, +, i]
println(lowercase) // [a, ω, 1, a, +, \u0069\u0307]

Hàm lowercase với String

fun String.lowercase(): String

Hàm này trả về chuỗi viết thường của chuỗi hiện tại theo quy tắc ánh xạ Unicode.

println("Iced frappé!".lowercase()) // iced frappé!

Hàm random String Kotlin

fun CharSequence.random(): Char

Trả về một ký tự ngẫu nhiên từ chuỗi ký tự hiện tại.

Hàm này ném ra lỗi NoSuchElementException nếu chuỗi ký tự này rỗng.

fun CharSequence.random(random: Random): Char

Trả về một ký tự ngẫu nhiên từ chuỗi ký tự hiện tại bằng cách sử dụng nguồn ngẫu nhiên được chỉ định.

Hàm replace – hàm tìm và thay thế chuỗi trong Kotlin

fun String.replace(
    oldChar: Char,
    newChar: Char,
    ignoreCase: Boolean = false
): String

Trả về một chuỗi mới với tất cả các lần xuất hiện của oldChar được thay thế bằng newChar.

val inputString0 = "Mississippi"
val inputString1 = "Insufficient data for meaningful answer."

println(inputString0.replace('s', 'z')) // Mizzizzippi
println(inputString1.replace("data", "information")) // Insufficient information for meaningful answer.

Một biến thể khác của hàm replace

fun String.replace(
    oldValue: String,
    newValue: String,
    ignoreCase: Boolean = false
): String
val inputString0 = "Mississippi"
val inputString1 = "Insufficient data for meaningful answer."

println(inputString0.replace('s', 'z')) // Mizzizzippi
println(inputString1.replace("data", "information")) // Insufficient information for meaningful

Hàm reversed – hàm đảo ngược chuỗi trong Kotlin

fun CharSequence.reversed(): CharSequence
fun String.reversed(): String

Hàm reversed trả về chuỗi với các ký tự bị đảo ngược.

Hàm split – hàm tách chuỗi Kotlin

fun CharSequence.split(
    vararg delimiters: String,
    ignoreCase: Boolean = false,
    limit: Int = 0
): List<String>

Tách chuỗi ký tự hiện tại thành một danh sách các chuỗi dựa trên dấu phân cách

Hàm split có 3 tham số

delimiters: Chuỗi được sử dụng làm dấu phân cách, ví dụ như khoảng trắng, -, | …

ignoreCase: Phân biệt hoa thường nếu bằng true, mặc định là false

limit: Số chuỗi con tối đa để trả về. Mặc định là 0, có nghĩa là không có giới hạn nào được đặt.

Hàm startsWith

fun String.startsWith(
    prefix: String,
    ignoreCase: Boolean = false
): Boolean

Trả về true nếu chuỗi này bắt đầu bằng tiền tố được chỉ định vào qua tham số.

fun String.startsWith(
    prefix: String,
    startIndex: Int,
    ignoreCase: Boolean = false
): Boolean

Trả về true nếu một chuỗi con của chuỗi này bắt đầu tại startIndex bù được chỉ định bắt đầu bằng tiền tố được chỉ định.

Hàm substring – hàm cắt chuỗi trong Kotlin

fun String.substring(startIndex: Int): String

Trả về một chuỗi con của chuỗi hiện tại bắt đầu tại startIndex được chỉ định và tiếp tục đến cuối chuỗi.

fun String.substring(startIndex: Int, endIndex: Int): String

Trả về chuỗi con của chuỗi này bắt đầu từ startIndex và kết thúc ngay trước endIndex.

Hàm trim

inline fun CharSequence.trim(
    predicate: (Char) -> Boolean
): CharSequence
inline fun String.trim(predicate: (Char) -> Boolean): String
fun CharSequence.trim(vararg chars: Char): CharSequence
fun String.trim(vararg chars: Char): String

Trả về một chuỗi con của chuỗi ký tự này có các ký tự đầu và cuối khớp với điều kiện đầu vào.

Hàm uppercase

fun Char.uppercase(): String
fun String.uppercase(): String
fun Char.uppercase(locale: Locale): String
fun String.uppercase(locale: Locale): String

Chuyển ký tự, chuỗi thành dạng chữ viết hoa sử dụng luật ánh xạ Unicode

Tổng kết

Trong bài viết này Codetutam đã giới thiệu các bạn một số hàm xử lý chuỗi cơ bản trong lập trình Kotlin. Danh sách các hàm xử lý chuỗi của Kotlin tương đối nhiều, các bạn có thể tham khảo trong trang chính thức của Kotlin. Ngoài ra nếu các bạn cần hỗ trợ bất kì thông tin gì có thể để lại comment để cùng CodeTuTam nghiên cứu nhé

 

    Liên hệ với chúng tôi

    Để lại thông tin để nhận được các bài viết khác

    Rate this post

    Mục lục

    Xem thêm nhiều bài tin mới nhất về Kiến thức

    Xem thêm