上一篇文章介绍了数组的声明和操作,包括字符串数组的用法。注意到Kotlin的字符串类也叫String,那么String在Java和Kotlin中的用法有哪些差异呢?这便是本文所要阐述的内容了。

  首先要说明的是String类型与基本变量类型之间的转换方式,在《Kotlin入门(3)基本变量类型的用法》中,提到基本变量类型可以通过toString方法转为字符串类型。反过来,字符串类型又该如何转为基本变量类型?如果使用Java编码,有以下几种转换方式:
字符串转整型:调用方法Integer.parseInt(***)
字符串转长整型:调用方法Long.parseLong(***)
字符串转浮点数:调用方法Float.parseFloat(***)
字符串转双精度数:调用方法Double.parseDouble(***)
字符串转布尔型:调用方法Boolean.parseBoolean(***)
字符串转字符数组:调用String对象的toCharArray方法
  就上面的转换情况来看,Java的实现方式比较繁琐,既需要其它类型的类名,有需要其它类型的转换方法。而在Kotlin这边,转换类型相对简单,并且与基本变量类型之间的转换保持一致,具体说明如下:
字符串转整型:调用String对象的toInt方法
字符串转长整型:调用String对象的toLong方法
字符串转浮点数:调用String对象的toFloat方法
字符串转双精度数:调用String对象的toDouble方法
字符串转布尔型:调用String对象的toBoolean方法
字符串转字符数组:调用String对象的toCharArray方法
显而易见,Kotlin对字符串的类型转换更友好,也更方便记忆。

当然,转换类型只是字符串的基本用法,还有更多处理字符串的其他用法,比如查找子串、替换子串、截取指定位置的子串、按特定字符分隔子串等等,在这方面Kotlin基本兼容Java的相关方法。对于查找子串的操作,二者都调用indexOf方法;对于截取指定位置子串的操作,二者都调用substring方法;对于替换子串的操作,二者都调用replace方法;对于按特定字符分隔子串的操作,二者都调用split方法。
下面是Kotlin使用indexOf和substring方法的代码例子:

    val origin:String = tv_origin.text.toString()
var origin_trim:String = origin
if (origin_trim.indexOf('.') > 0) {
origin_trim = origin_trim.substring(0, origin_trim.indexOf('.'))
}

在这些字符串处理方法里面,唯一的区别是split方法的返回值,在Java中,split方法返回的是String数组,即String[];但在Kotlin中,split方法返回的是String队列,即List<String>。下面是Kotlin使用split方法的示例代码:

    btn_split.setOnClickListener {
var strList:List<String> = origin.split(".")
var strResult:String = ""
for (item in strList) {
strResult = strResult + item + ", "
}
tv_convert.text = strResult
}

  

若想获取字符串某个位置的字符,这个看似简单的需求,但Java实现之时却有点繁琐,只能调用substring方法去截取指定位置的字符串,如下所示:

    String result = origin.substring(number, number+1);
tv_convert.setText(result);

现在使用Kotlin实现上述需求,就简单多了,因为Kotlin允许直接通过下标访问指定位置的字符,代码如下:

    tv_convert.text = origin[number].toString()

同时,Kotlin也支持字符串通过get方法获取指定位置上的字符,代码如下:

    tv_convert.text = origin.get(number).toString()

如此一来,Kotlin的代码不但更加精炼,而且可读性也增强了。

Kotlin对字符串带来的便利并不限于此,大家知道,Java如果要把几个变量拼接成字符串,要么用加号强行拼接,要么用String.format函数进行格式化。可是前者的拼接加号,时常会跟数值相加的加号混淆;而后者的格式化,还得开发者死记硬背诸如%d、%f、%s、%c、%b等等格式转换符,实在令人头痛。对于格式化这个痛点,Kotlin恰如其分地进行了优化,何必引入这些麻烦的格式转换符呢?直接在字符串中塞进“$变量名”表示此处引用该变量的值,岂不妙哉!
心动不如行动,赶紧动起手来,看看Kotlin如何格式化字符串,代码如下所示:

    btn_format.setOnClickListener { tv_convert.text = "字符串值为 $origin" }

这里要注意,符号$后面跟变量名,系统会自动匹配最长的变量名。比如下面这行代码,打印出来的是变量origin_trim的值,而不是origin的值:

    btn_format.setOnClickListener { tv_convert.text = "字符串值为 $origin_trim" }

另外,有可能变量会先进行运算,再把运算结果拼接到字符串中。此时,则需用大括号把运算表达式给括起来,具体代码如下:

    btn_length.setOnClickListener { tv_convert.text = "字符串长度为 ${origin.length}" }

注意到在Kotlin中,美元符号$属于特殊字符,因此不能直接打印它,必须经过转义才可打印。转义的办法是使用“${'***'}”表达式,该表达式外层的“${''}”为转义声明,内层的“***”为需要原样输出的字符串,所以通过表达式“${'$'}”即可打印一个美元符号,示例代码如下所示:

    btn_dollar.setOnClickListener { tv_convert.text = "美元金额为 ${'$'}$origin" }

如果只是对单个美元符号做转义,也可直接在符号$前面加个反斜杆,即“\$”,代码如下:

    btn_dollar.setOnClickListener { tv_convert.text = "美元金额为 \$$origin" }

不过一个反斜杆仅仅对一个字符进行转义,如果要对一个字符串做转义,也就是把某个字符串的所有字符原样输出,那么只能采用形如“${'***'}”的表达式了,该表达式用单引号把待转义的字符串包起来,好处是能够保留该字符串中的所有特殊字符。

下面来个Kotlin处理字符串的效果动图:

__________________________________________________________________________
本文现已同步发布到微信公众号“老欧说安卓”,打开微信扫一扫下面的二维码,或者直接搜索公众号“老欧说安卓”添加关注,更快更方便地阅读技术干货。

Kotlin入门(5)字符串及其格式化的更多相关文章

  1. Kotlin入门教程——目录索引

    Kotlin是谷歌官方认可的Android开发语言,Android Studio从3.0版本开始就内置了Kotlin,所以未来在App开发中Kotlin取代Java是大势所趋,就像当初Android ...

  2. python入门6 字符串拼接、格式化输出

    字符串拼接方式    1  使用 + 拼接字符串 2 格式化输出:%s字符串 %d整数 %f浮点数 %%输出% %X-16进制 %r-原始字符串 3 str.format() 代码如下: #codin ...

  3. Kotlin入门(32)网络接口访问

    手机上的资源毕竟有限,为了获取更丰富的信息,就得到辽阔的互联网大海上冲浪.对于App自身,也要经常与服务器交互,以便获取最新的数据显示到界面上.这个客户端与服务端之间的信息交互,基本使用HTTP协议进 ...

  4. 写给Android开发者的Kotlin入门

    写给Android开发者的Kotlin入门 转 https://www.jianshu.com/p/bb53cba6c8f4 Google在今年的IO大会上宣布,将Android开发的官方语言更换为K ...

  5. Kotlin入门(9)函数的基本用法

    上一篇文章介绍了Kotlin新增的空安全机制,控制语句部分可算是讲完了,接下来将连续描述Kotlin如何定义和调用函数,本篇文章先介绍函数的基本用法. 前面几篇文章介绍控制语句之时,在setOnCli ...

  6. Kotlin入门(11)江湖绝技之特殊函数

    上一篇文章介绍了Kotlin对函数的输入参数所做的增强之处,其实函数这块Kotlin还有好些重大改进,集中体现在几类特殊函数,比如泛型函数.内联函数.扩展函数.尾递归函数.高阶函数等等,因此本篇文章就 ...

  7. Kotlin入门(15)独门秘笈之特殊类

    上一篇文章介绍了Kotlin的几种开放性修饰符,以及如何从基类派生出子类,其中提到了被abstract修饰的抽象类.除了与Java共有的抽象类,Kotlin还新增了好几种特殊类,这些特殊类分别适应不同 ...

  8. python3入门之字符串

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 经过前面的介绍相信大家也对python有了一个初步的了解:本节主要介绍字符串,不管学习什么编语言字符串一定在其中扮演着重要的地位.本节主要讲解,字 ...

  9. yield生成器及字符串的格式化

    一.生成器 def ran(): print('Hello world') yield 'F1' print('Hey there!') yield 'F2' print('goodbye') yie ...

随机推荐

  1. celery异步认知

    celery是异步任务的框架 是由python实现的异步框架. 在使用celery我们经常分为三个部分, 第一部分就是我们所说的客户端, 就是发起异步任务的一方, 第二部分 任务队列 broker 第 ...

  2. 干货—MySQL常见的面试题+索引原理分析!

    目录 MySQL索引的本质 MySQL索引的底层原理 MySQL索引的实战经验 面试 问:数据库中最常见的慢查询优化方式是什么? 同学A:加索引. 问:为什么加索引能优化慢查询? 同学A:...不知道 ...

  3. rest framework 尝鲜

    安装 pip install djangorestframework 新建项目 python manage.py startapp idcs 添加模型(models.py) class Idcs(mo ...

  4. code128 C语言实现

    https://blog.csdn.net/walk_ing/article/details/52712641 参考链接 1,具有A.B.C三种不同的编码类型,可提供标准ASCII中128个字元(字元 ...

  5. postgresql 唯一约束增强

    http://blog.chinaunix.net/uid-15145533-id-2775821.html

  6. mysql 开发进阶篇系列 40 mysql日志之二进制日志下以及查询日志

    一.binlog 二进制其它选项 在二进制日志记录了数据的变化过程,对于数据的完整性和安全性起着非常重要作用.在mysql中还提供了一些其它参数选项,来进行更小粒度的管理. 1.1 binlog-do ...

  7. Windows抓屏技术

    Windows桌面共享中一些常见的抓屏技术 1. BitBlt   我想做Windows开发应该都知道这个API, 它能实现DC间的内容拷贝, 如果我们把源DC指定成Monitor DC或是桌面DC, ...

  8. SQL 必知必会·笔记<14>更新和删除数据

    1. 更新数据 基本的UPDATE语句,由三部分组成: 要更新的表 列名和它们的新值 确定要更新那些行的过滤条件 更新单列示例: UPDATE Customers SET cust_email = ' ...

  9. 和我一起打造个简单搜索之IK分词以及拼音分词

    elasticsearch 官方默认的分词插件,对中文分词效果不理想,它是把中文词语分成了一个一个的汉字.所以我们引入 es 插件 es-ik.同时为了提升用户体验,引入 es-pinyin 插件.本 ...

  10. DNS服务器能遭受到的DDNS攻击类型

    每个网站都有可能会遭受到攻击,现在的互联网服务器遭受的最多的是DDOS攻击,本文总结了一些DNS服务器会遇到的DDOS攻击类型,以及相应的预防措施. [1]的作者将DDOS的攻击分为三种类型: 大数据 ...