Kotlin使用String类型字符串。字符串表示一个有序的字符集合,例如在前面代码中看到的"fkit.org"、"crazyit.org"等表明字符串,String也可被当成多个char的有序集合。html
Kotlin使用String来表明字符串,String类型是一种快速、现代化的字符串实现,字符串中的每一个字符都由独立的Unicode字符组成,String容许经过形如s[i]的格式来访问字符串指定索引处的字符,也可经过for循环遍历字符串的每一个字符。例如以下代码。java
程序清单:codes\02\2.8\StringQs.kt正则表达式
fun main(args: Array<String>) {编程
var str = "fkjava.org"api
println(str[2]) // 输出japp
println(str[3]) // 输出adom
println(str[6]) // 输出.jvm
// 遍历str字符串中每一个字符ide
for (c in str) {工具
println(c)
}
}
上面代码中第一行粗体字代码使用s[i]的形式根据索引访问字符串中指定位置的字符;第二行粗体字代码则使用for循环遍历字符串所包含的每一个字符。
Kotlin的字符串有两种字面值(Literal),分别是:
转义字符串:转义字符串能够有转义字符,转义字符串很像Java字符串。
原始字符串:原始字符串能够包含换行和任意文本。原始字符串须要用三个引号括起来。
例如以下程序。
程序清单:codes\02\2.8\StringTest.kt
fun main(args: Array<String>) {
// 定义普通字符串
var str = "fkjava.org"
println(str.length)
// 定义原始字符串
val txt = """
|天上白玉京,
|十二楼五城。
|仙人抚我顶,
|结发受长生。
""".trimMargin()
println(txt)
}
上面程序中第一行粗体字代码是转义字符串,这种字符串和普通的Java字符串基本相同;第二段粗体字代码则是Kotlin原始字符串——三个引号括起来的部分都是字符串内容,包括换行符等各类特殊字符。
编程时为了程序格式,每每会在原始字符串中进行一些缩进,但这些缩进每每并非原始字符串但愿包含的,此时便可使用trimMargin()方法来去掉原始字符串前面的缩进——默认状况下,Kotlin使用竖线(|)做为边界符。也就是说:全部竖线(|)以前的内容都会被去掉。
若是有必要,开发者固然也可以使用其余字符做为边界符,此时就须要在trimMagrin()方法中传入该边界符做为参数。例如以下程序(程序清单同上)。
// 定义原始字符串
val txt2 = """
^天上白玉京,
^十二楼五城。
^仙人抚我顶,
^结发受长生。
""".trimMargin("^")
println(txt2)
Kotlin容许在字符串中嵌入变量和表达式,只要将变量和表达式放入${}中便可,这样Kotlin将会把把该变量或表达式的值嵌入该字符串中。
字符串模板不只能够在普通字符串中使用,也能够在原始字符串中使用。例如以下程序:
程序清单:codes\02\2.8\StringTemplate.kt
fun main(args: Array<String>) {
val bookPrice = 79
// 字符串模板中嵌入变量
var s = "图书价格是:${bookPrice}"
println(s)
val rand = java.util.Random() // 建立Java的Random对象
// 字符串模板中嵌入方法调用
var s2 = "伪随机数是:${rand.nextInt(10)}"
println(s2)
val myStr = "fkjava.org"
println("${myStr}的长度是${myStr.length}")
var bookName = "疯狂Kotlin讲义"
val poem = """
|图书名是${bookName},
|图书价格是${bookPrice},
|随机促销价是${rand.nextInt(10) + 50}
""".trimMargin()
println(poem)
}
上面程序中第一行粗体字代码在字符串模板中嵌入了一个普通变量,第二行粗体字代码在字符串模板中嵌入了调用Random对象的nextInt()方法;第三行粗体字代码则在字符串模板中嵌入了调用String对象的length属性;第三段粗体字代码在原始字符串中嵌入变量、表达式,这也是容许的。
Kotlin的String与Java的String并非同一个类,所以它们的方法略有不一样,但在功能上,两个类所提供的功能大体类似,实际上Kotlin的String类提供了更多方法。例如String提供了系列toXxx()方法将字符串转成数值,例如以下代码。
程序清单:codes\02\2.8\StringFunTest.kt
fun main(args: Array<String>) {
val s1 = "2.34"
// 将s1字符串转成Double
val d: Double = s1.toDouble()
println(d)
var s2 = "45"
// 将s2字符串转成Int
var i: Int = s2.toInt()
println(i)
}
此外,Kotlin的String也提供了一些额外的工具方法,例如将字符串首字母大写、小写的方法。例如以下代码(程序清单同上)。
val str = "fkjava.org"
println(str.capitalize()); // 首字母大写
println(str.decapitalize()); // 首字母小写
还有例如返回两个字符串相同的前缀、相同的后缀的方法。例如以下代码(程序清单同上)。
var str2 = "crazyit.org"
// 返回两个字符串相同的前缀
println(str2.commonPrefixWith("crazyjava.org"));
// 返回两个字符串相同的后缀
println(str2.commonSuffixWith("fkit.org"));
还有Java的String的contains()方法不支持使用正则表达式,但Kotlin的String的contains()方法支持使用正则表达式匹配。例如以下代码(程序清单同上)。
var str3 = "java886"
// 判断str3是否包含3个连续的数字
println(str3.contains(Regex("\\d{3}")))
关于Kotlin字符串还有很多很是方便的工具方法,具体能够参考Kotlin核心库的关于String的API文档:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html。