🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 1. 变量 `Kotlin`中的变量分为两种类型: - 可变变量:用关键字`var`来修饰,可以进行多次修改。 - 不可变变量:用关键字`val`来修饰,只能进行一次初始化。 语法格式: ``` var/val 变量名: 数据类型 // 比如 var number: Int ``` 声明变量的同时给变量赋值: ``` var number: Int = 123 ``` 值得注意的是,`Kotlin`会根据变量的值自动识别变量的数据类型,所以上面的代码可以简写为: ``` var number = 123 ``` 而这种写法也就是我们在`Java`中常写的方式。 # 2. 常见数据类型 注意到上面我们所使用的是`Int`来定义一个数值类型,在`Kotlin`中自有的数据类型为: - 数值型,`Byte`(`1`字节)、`Short`(`2`字节)、`Int`(`4`字节)、`Long`(`5`字节)、`Float`(`4`字节)、`Double`(`8`字节); - 字符型,`Char`; - 布尔型,`Boolean`; - 数组型,`IntArray`、`BooleanArray`、`CharArray`以及非基本类型的`Array<String>` - 字符串型,`String`; ## 2.1 数组类型 对于数组的两种定义方式这里给出一个案例: ``` var arrays_1: IntArray = intArrayOf(1, 2, 3) var arrays_2: Array<Int> = arrayOf(1, 2, 3) ``` ## 2.2 字符串类型 字符串的常见操作在各类编程语言中都提供了较多的操作`API`,且也是日常编码过程中使用较多的一些基础操作。所以在这里对一些常见的字符串操作进行介绍: ### 2.2.1 查找字符串中元素 查找字符串中的第`1`个元素、最后`1`个元素以及角标为`index`的元素。 ~~~ fun main() { val name = "张天下" print(name.first()) // 张 print(name.get(1)) // 天 print(name.last()) // 下 } ~~~ ### 2.2.2 字符串截取 ~~~ fun main() { val name = "张天下" print(name.substring(1)) // 天下 [1, length - 1] print(name.substring(0, 1)) // 张 [0, 1) } ~~~ 还提供了`subSequence`方法,用法类似。 ### 2.2.3 字符串替换 使用`replace`函数完成,比如下面的案例: ~~~ fun main() { var name = "张天下张" var newName = name.replace("张", "李") print(name) // 张天下张 print(newName) // 李天下李 } ~~~ 从上面的案例中我们可以知道两点: - 字符串和`Java`中类似,还是常量,也就是对于字符串的修改并不会在原本内容上修改,而是建立一个新的字符串。所以这里建议定义字符串的时候使用`val`关键字。 - `replace`操作的替换过程类似正则匹配,会多个匹配,多个替换。 同时也提供了多个替换方法,比如下面的案例: ~~~ fun main() { val name = "张天下张" val newName_0 = name.replaceFirst("张", "李") val newName_1 = name.replaceBefore("张", "李") val newName_2 = name.replaceAfter("张", "李") val newName_3 = name.replaceRange(0, 2, "李") println(newName_0) // 李天下张 println(newName_1) // 李张天下张 println(newName_2) // 张李 println(newName_3) // 李下张 } ~~~ 从上面案例可以知道: - `replaceFirst`只替换第一个匹配; - `replaceBefore`将第一个匹配位置的之前元素替换,即使之前没有元素; - `replaceAfter`将第一个匹配的之后的元素替换,即使之后没有元素; - `replaceRange`按照范围进行替换,范围为`[index, last)`; ### 2.2.4 字符串分割 ~~~ fun main() { val name = "天下张" println(name.split("下")) // [天, 张] } ~~~ ### 2.2.5 模板表达式 字符串模板表达式由`${变量名/函数/表达式}`组成,也可以省略`{}`,例如“`$变量名`”。 ~~~ fun main() { var firstName: String = "张" val name = "天下$firstName" // 使用变量 println(name) // 天下张 } ~~~ 这种写法优点类似于在`Java`中的字符串的标准化输出`%s`,但是这种方式感觉更加方便。 上面的案例仅仅使用了`${变量名}`,下面将实践后面两种方式: ~~~ fun firstName(): String { return "张" } fun main() { val name = "天下${firstName()}" // 使用函数 println(name) // 天下张 } ~~~ 接着上面的案例: ~~~ fun main() { val name = "天下${firstName()}" // 使用表达式 println(name.replaceAfter("张", "李")) // 天下张李 } ~~~ ## 2.3 类型之间转换 在`IDEA`中可以输入`toChar`等类似的`to`前缀即可,比如下面的案例: ~~~ fun main() { var number = 23 println(number.toString()) println(number.toByte()) println(number.toFloat()) println(number.toDouble()) ... } ~~~ ## 2.4 其余类型 至于其余数据类型的用法和`Java`中类似,这里就不再给出案例。