Kotlin使用String类型字符串。字符串表示一个有序的字符集合,例如在前面代码中看到的"fkit.org"、"crazyit.org"等代表字符串,String也可被当成多个char的有序集合。

字符串类型

Kotlin使用String来代表字符串,String类型是一种快速、现代化的字符串实现,字符串中的每个字符都由独立的Unicode字符组成,String允许通过形如s[i]的格式来访问字符串指定索引处的字符,也可通过for循环遍历字符串的每个字符。例如如下代码。

程序清单:codes\02\2.8\StringQs.kt

fun main(args: Array<String>) {

var str = "fkjava.org"

println(str[2]) // 输出j

println(str[3]) // 输出a

println(str[6]) // 输出.

// 遍历str字符串中每个字符

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字符串的方法

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。

以上内容节选自《疯狂Kotlin讲义》:一本让您最直接认识Kotlin的疯狂讲义
本书即将于2017年11月发售 敬请期待
往期连载
第一期:juejin.im/post/59c0b7…

第二期:juejin.im/post/59c1d6…

第三期:juejin.im/post/59e407…

第四期:juejin.im/post/59ed77…

第五期:juejin.im/post/59eec3…

第六期:juejin.im/post/59effb…

第七期:juejin.im/post/59f153…

第八期:juejin.im/post/59f283…

第九期:juejin.im/post/59f686…

第十期:juejin.im/post/59f7ea…

第十一期:juejin.im/post/59f953…

第十二期:juejin.im/post/59fa7e…

相关书籍《疯狂Android讲义》https://item.jd.com/11689014.html

疯狂kotlin讲义连载之Kotlin的基础类型--字符串相关推荐

  1. 疯狂kotlin讲义连载之Kotlin的基础类型--null安全

    null安全可以说是Kotlin语言对Java的重大改进之一,这样可以避免Java编程时令人恐惧的"NullPointerException"(简称:NPE).但话说回来,null ...

  2. 疯狂kotlin讲义连载之运算符和表达式——区间运算符

    3.3 区间运算符 Kotlin提供了两个区间运算符,它们都可以非常方便地构建一种数据结构,这种数据结构可包含特定区间内的所有值. 3.3.1闭区间运算符 闭区间运算符a .. b用于定义一个从a~b ...

  3. Kotlin入门-万物皆对象,基础类型

    Kotlin说:万物皆对象. 可以说,Kotlin全面的接管了所有类型.一统天下. 即是基础,那就需要,通盘了解.按目录来就行.也有Xmind版本 github地址 本文将从下面几个方面去讲解 数字 ...

  4. 疯狂Kotlin讲义学习笔记07章:面向对象(上)对象,中缀,解构,幕后字段、属性,延迟初始化,访问控制符,构造器,继承,重写,super限定,重写,多态,is类型检查,as强制类型转换

    1.定义类的标准格式 修饰符 class 类名 [ constructor 主构造器]{零到多个次构造器定义零到多个属性....零到多个方法.... } 修饰符open是final的反义词,用于修饰一 ...

  5. 疯狂Kotlin讲义学习笔记04-05章:流程控制、数组和集合

    1.when分支取代swith分支 不在需要使用case关键字 case后面的冒号改为-> default改为更有意义的else 如果一个case里有多条语句,需要将多条语句用大括号括起来 wh ...

  6. 疯狂android讲义(kotlin版) 源码 pan_每周一书《疯狂Python讲义》分享

    内容简介 本书全面而深入介绍了Python编程的相关内容,全书内容大致可分为四个部分,第一部分系统讲解了Python的基本语法结构.函数编程.类和对象.模块和包.异常处理等:第二部分主要介绍Pytho ...

  7. 《疯狂Kotlin讲义》读书笔记2——Kotlin的基本类型

    Kotlin的基本类型 和Java一样,Kotlin也是一种强类型语言,即要求: 1.所有变量都需要先声明.后使用. 2.指定类型的变量只能接受类型与之匹配的值. 强类型语言可以在编译过程中发现源代码 ...

  8. Kotlin学习笔记(1)-- 基础语法

    文章目录 Kotlin学习笔记(1)-- 基础语法 输出 语法 代码 输出 可读可改(var) 语法 代码 输出 内置数据类型 只读变量(val) 类型推断 编译时常量 语法 代码 输出 引用类型 r ...

  9. Kotlin知识归纳(一) —— 基础语法

    android Kotlin系列: Kotlin知识归纳(一) -- 基础语法 Kotlin知识归纳(二) -- 让函数更好调用 Kotlin知识归纳(三) -- 顶层成员与扩展 Kotlin知识归纳 ...

最新文章

  1. Extended WPF Toolkit 新控件介绍
  2. 互联网研发中负载均衡算法一点探索
  3. 思路+步骤+方法,三步教你如何快速构建用户画像?
  4. Android深度探索第五章
  5. 拉氏变换及复域传递函数
  6. MFC_2.2 编辑框和文本控件
  7. C语言 Win动态库
  8. greenplum配置高可用_0665-6.2.0-如何在CDH中配置HMS高可用
  9. 解决:An HTTP error occurred when trying to retrieve this URL.
  10. Error: Can’t resolve ‘./src’ in ‘E:\ASUS\Documents\VSCode files\WebPackProject’
  11. 与或非运算(布尔值/非布尔值)
  12. 杭电2094--产生冠军(拓扑排序)
  13. mysql 存储过程 汉字取拼音或者首字母
  14. vivado 开发教程(四) 行为仿真
  15. 腾讯AI开放平台使用尝试:通过文本翻译API进行汉译英
  16. SQL2008升级SQL2008R2完全教程
  17. WIN11 系统取消代理 | 设置代理服务器
  18. 咸鱼的 Github 情报 | 一个支持边下边播、无版权限制和自动上传的BT离线下载程序...
  19. 如何保证代码的健壮性和可读性
  20. 跨境电商政策利好,商家如何破局“三封”难题

热门文章

  1. c2000 电阻采样_C2000/STM32/Microchip电阻采样方案比较
  2. 【转】 什么是Transact-SQL?
  3. StyleGan2-ADA: Training Generative Adversarial Networks with Limited Data
  4. Nervos 联合 Gitcoin 共同推出 5 万美元的开发者赏金计划
  5. CPU「主频」是什么,有哪些限制条件,对于 CPU 性能的影响有哪些?
  6. python黑科技自动p图_大神级Python工程师是怎么P图的,带你用Python玩转P图
  7. Html,js网上购物订单的制作
  8. Real-ESRGAN超分辨网络
  9. 计算机系给未来的自己写信,写信给未来的自己作文800字
  10. 考研失败想要二战怎么从绝望中走出来?