如何在Kotlin中使用compareTo()和其他字符串操作

1,370 阅读9分钟

Kotlin是一种静态类型的编程语言,这意味着每个变量都应该有一个固定类型。有各种内置的Kotlin类型,其中之一是String 类型

我们使用String 类型来存储字符串值,它是由双引号环绕的字符序列。然后我们可以用各种方式处理这些存储的字符串值。

让我们来了解更多关于Kotlin字符串的信息以及如何使用它们。在本指南中。

什么是Kotlin中的字符串?

让我们来看看一个例子,以便更好地理解Kotlin字符串。

val firstName: String = "Kingsley"    

Kingsley这里,变量的名字是firstName ,类型是String ,双引号内的值是""

由于我们马上要把变量的值分配给Kingsley ,所以我们可以不考虑类型定义。因此,下面的变量同样有效。

val firstName = "Kingsley"    

这个方便的Kotlin特性被称为类型推理。基本上,它意味着编译器可以自动推断出一个变量的类型,所以我们不需要特别指出它。

在Kotlin中处理字符串

每当我们使用"" 来创建一个字符串时,就会初始化一个新的String 对象。这个对象为我们提供了几个内置的属性和方法来帮助我们处理字符串的值。

属性给了我们关于一个给定的字符串值的信息,比如它的长度,字符串中特定字符的位置等等。

方法是我们可以在一个对象上调用的函数,以直接操作其值。例如,我们可以在一个字符串上调用一个方法来返回原始字符串的一个子集。

让我们来看看如何在Kotlin中执行一些常用的字符串操作。

通过索引检索Kotlin字符串的单个字符

字符串中的每个字符都由一个索引表示,它只是一个整数值。和大多数编程语言一样,我们从0开始计算索引,字符串中的第一个字符的索引是0,第二个字符的索引是1,以此类推。

我们可以使用其唯一的索引来检索字符串中的一个字符,就像这样。

fun main() {
    val greeting = "Hi Kingsley"       

    println(greeting[0]) // H
    println(greeting[1]) // i
    println(greeting[2]) // whitespace
    println(greeting[3]) // K
}

在Kotlin中检查一个字符串是否为空

我们可以使用方法isEmpty() ,检查一个变量是否有一个空的字符串值。

下面是一个检查空字符串的例子。

fun main() {
    val emptyStr = ""       

    println(emptyStr.isEmpty()) // true
}

isEmpty() 如果字符串为空,则返回一个布尔值: ;如果字符串包含任何字符,则返回布尔值: 。true false

在Kotlin中获取一个字符串的长度

想象一下,你有一个程序,你想缩写所有超过指定长度的名字。要做到这一点,你必须首先获得每个字符串的长度。

长度属性返回字符串内部存在的字符数。

fun main() {
    val greeting = "Hi Kingsley"       

    println(greeting.length) // 11
}

字符串内的所有字符都被计算在内,包括空白处。

在Kotlin中获取一个字符串子集

要从一个较大的字符串中切出一部分,可以使用Kotlin的substring() 方法。

substring() 提取一个字符串中介于所提供的开始和结束索引之间的部分。在下面的例子中,我们提取的是第6个索引和第11个索引之间的所有字符。

fun main() {
    val greeting = "Hello Worldd"       

    println(greeting.substring(6, 11)) // World
}

请注意,第6个索引的字符没有被包括在内,但第11个索引的字符被包括在内。

在Kotlin中连接字符串

字符串连接是指两个或多个字符串被合并。合并两个或多个字符串的一个简单方法是使用加法+ 操作符。

fun main() {
    val firstName = "Kingsley"   
    val lastName = "Ubah"   
    val fullName = firstName + lastName

    println(fullName) // KingsleyUbah
}

你可以用空格或任何其他字符来分隔两个字符串。

fun main() {
    val firstName = "Kingsley"   
    val lastName = "Ubah"   
    val fullName = firstName + " " + lastName

    println(fullName) // Kingsley Ubah
}

你也可以使用+ ,在一个较大的字符串中嵌入变量。

fun main() {
    val customer = "Kingsley"
    val totalAmount = 50
    val items = 6

    val msg = "Hi " + customer + ", your cart has a total of " + items + " items and they amount to " + totalAmount + " dollars"

    println(msg)
}

请注意,使用+ 进行重复连接会很快使你的代码更难读。你可以使用一个模板字符串来避免这个问题。

模板字符串允许你直接将变量嵌入到主字符串中。使用模板字符串,很容易发现任何遗漏的空间。

要在模板字符串中包含变量,请在每个变量名称前加一个美元符号$ ,如下面的例子所示。

fun main() {
    val customer = "Kingsley"
    val totalAmount = 50
    val items = 6

    val msg = "Hi $customer, your cart has a total of $items items and they amount to $totalAmount dollars"

    println(msg) 
}

模板字符串是在Kotlin中使你的代码更干净、更可读的众多方法之一。

使用比较运算符来比较Kotlin字符串

你可以在Kotlin中使用比较运算符来检查两个或多个字符串对象是否在结构上或参考上相等。

结构性比较检查两个或多个对象是否具有相同的值。为了检查这种平等性,我们使用双等号== 。这里有一个基本的例子。

fun main() {
    val a = "Hello"
    val b = "Hallo"
    val c = "Hello"

    println(a == b)   // returns false
    println(a == c)   // returns true

}

因为ac 都有相同的值,用它们与== 进行比较会返回true

请记住,这种比较是大小写敏感的。这意味着大写字母和小写字母被解释为是不同的,所以字符串 "hello "和 "Hello "是不一样的。

参考性比较检查两个或多个变量是否指向同一个对象。对于参照比较,我们使用三等号=== ,如下面的例子所示。

fun main() {
    val str_1 = "Hello"    
    val str_2 = "Hello"
    val str_3 = "Hello World"

    println(str_1 === str_2) // true     
    println(str_1 === str_3) // false
}

str_1str_2 之间的参照比较返回true ,因为当进行第二次赋值时,Java虚拟机(JVM)发现字符串 "Hello "已经存在于池中。

让第二个变量指向同一个字符串对象 "Hello",可以节省一些内存。

然而,JVM为第三个变量的赋值分配了单独的内存,因为其值是不同的。因此,在str_1str_3 之间的比较会返回false

使用equals() 函数来比较Kotlin字符串

对于那些有Java背景的人来说,equals() 函数应该是熟悉的。类似于我们之前看到的==equals() 检查两个对象是否有相同的内容。

让我们看一个例子,用这个简单的方法来比较字符串。下面,我们定义了四个字符串变量。在这四个中,只有ac 是相同的。

fun main() {
    val a = "Hello"
    val b = "Hallo"
    val c = "Hello"
    val d = "hello"

    println(a.equals(b))    // returns false
    println(a.equals(c))     // returns true
    println(a.equals(d, true))     // returns true
}

请注意,equals() 检查默认是区分大小写的,所以字符串 "hello "与 "Hello "不一样。

然而,与== 不同的是,我们可以选择通过在equals() 中传递true 的第二个参数来取消大小写敏感性。我们在最后一行这样做了,我们将 "Hello "与 "hello "进行了比较,检查结果是true

使用compareTo() 函数来比较Kotlin字符串

你也可以用compareTo() 在Kotlin中比较字符串。 下面是这个方法的基本语法。

mainStr.compareTo(otherStr)

前面的方法返回一个布尔值(truefalse ),而compareTo() 则返回一个整数。

  • 如果主字符串和另一个字符串相等,返回0
  • 如果另一个字符串的ASCII值比主字符串大,则返回一个负数
  • 如果另一个字符串的ASCII值小于主字符串,则返回一个正数。
// Example 1
fun main() {
val a = "Hallo"
val b = "Hello"

println(a.compareTo(b))    // returns -4

}

// Example 2
fun main() {
val a = "Hello"
val b = "Hallo"

println(a.compareTo(b))    // returns 4

}

// Example 3
fun main() {
val a = "Hello"
val b = "Hello"

println(a.compareTo(b))    // returns 0

}

compareTo() 默认情况下,字符串比较是区分大小写的。像 ,你可以通过传递参数 来覆盖这种行为。equals() true

在下面的例子中,第一次检查返回一个负值,因为我们明确启用了大小写敏感性。第二个检查返回0 ,因为我们禁用了大小写敏感性。

fun main() {
    val upper: String = "Hello"
    val lower: String = "hello"


    println(upper.compareTo(lower, false))    // returns false (-32)
    println(upper.compareTo(lower, true))     // returns true (0)

}

替换Kotlin中的字符串

String.replace() 方法被用来替换Kotlin中的字符串。其基本语法如下。

mainString.replace(oldValue, newValue)

该方法检查主字符串中所提供的旧值的出现情况,并将每个实例替换为新值。下面是一个例子。

fun main() {
    var mainStr = "Replacing Strings in Python"
    val oldValue = "Python"
    val newValue = "Kotlin"

    val newStr = mainStr.replace(oldValue, newValue)

    println(newStr) // Replacing Strings in Kotlin
}

要禁用大小写敏感性,请将true 作为第三个参数。让我们看看这个动作。

var mainStr = "Replacing Strings in python"    
    val oldValue = "Python"
    val newValue = "Kotlin"

    var newStr = mainStr.replace(oldValue, newValue, true)
    println(newStr) // Replacing Strings in Kotlin

你可以看到,"python "和 "Python "之间的大小写差异被忽略了。

在Kotlin中对字符串进行排序

我们可以在Kotlin中通过对字符串连续执行toCharArray(),sorted(), 和joinToString() 方法对字符串按字母顺序排序。

假设你想将字符串 "elephant "按字母顺序重新排序:"aeehlnpt"。首先,用toCharArray() 方法将字符串转换成一个数组。然后,使用sorted() ,对数组进行排序。最后,使用joinToString() ,将数组变回字符串。

fun main() {
    val str = "elephant"
    val arr = str.toCharArray()
    val sorted = arr.sorted().joinToString("")
    println(sorted) // aeehlnpt
}

你可以把所有的东西都包在一个自定义的函数里,只要你想对一个字符串进行排序,就可以调用这个函数。

fun sortByAlpha(str: String) {       
    val arr = str.toCharArray()
    println(arr.sorted().joinToString(""))

}
fun main() {
    sortByAlpha("elephant")
}

总结

在本教程中,我们了解了Kotlin字符串以及如何执行一些常见的Kotlin字符串操作。这些操作包括获取字符串长度、对字符串进行排序、连接字符串、比较字符串,以及使用字符串模板使你的字符串可读。