上一篇文章介绍了数组的声明和操作,包括字符串数组的用法。注意到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 = originif (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处理字符串的效果动图:

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

转载于:https://www.cnblogs.com/aqi00/p/7144377.html

Kotlin入门(5)字符串及其格式化相关推荐

  1. 测牛学堂:2023软件测试自动化python入门(字符串的格式化输出)

    字符串的格式化输出的三种方式 所谓的格式化输出,就是内容按照一定格式要求进行输出. 在python中,格式化输出就是一个字符串中出现多个变量的简便写法,不同通过+去和变量拼接. 方式1:% 方法 %s ...

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

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

  3. Kotlin入门(31)JSON字符串的解析

    json是App进行网络通信最常见的数据交互格式,Android也自带了json格式的处理工具包org.json,该工具包主要提供了JSONObject(json对象)与JSONArray(json数 ...

  4. Python实战从入门到精通第十九讲——自定义字符串的格式化

    通过 format() 函数和字符串方法使得一个对象能支持自定义的格式化. 为了自定义字符串的格式化,我们需要在类上面定义 __format__() 方法.例如: _formats = {'ymd' ...

  5. python语言入门n-python语言入门之字符串的一些用法

    本篇教程探讨了python语言入门之字符串的一些用法,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. < 一.字符串的拼接: a="123' b="ab ...

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

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

  7. Kotlin入门(26)数据库ManagedSQLiteOpenHelper

    共享参数毕竟只能存储简单的键值对数据,如果需要存取更复杂的关系型数据,就要用到数据库SQLite了.尽管SQLite只是手机上的轻量级数据库,但它麻雀虽小.五脏俱全,与Oracle一样存在数据库的创建 ...

  8. Kotlin入门(25)共享参数模板

    共享参数SharedPreferences是Android最简单的数据存储方式,常用于存取"Key-Value"键值对数据.在使用共享参数之前,要先调用getSharedPrefe ...

  9. Kotlin入门(21)活动页面的跳转处理

    Activity的活动页面跳转是App最常用的功能之一,在前几章的demo源码中便多次见到了,常常是点击界面上的某个按钮,然后跳转到与之对应的下一个页面.对于App开发者来说,该功能的实现非常普通,使 ...

最新文章

  1. 计算机存储临时数据的存储器,计算机关闭后存储的数据不会丢失的内存储器是...
  2. Linux C编程--线程操作3--线程属性解析
  3. python安装scipy
  4. 简明 Python 编程规范
  5. SQL Inject of Code to bypass
  6. 小小的吹一下集结号~
  7. Google和Baidu常用的搜索技巧--转
  8. 【软件】我安装Tomcat5.5(Java Web开发服务器)的几点经验
  9. suse php5,简简单单搭建linux SuSE LAMP环境
  10. 快速构建Windows 8风格应用10-设备方向
  11. 我要偷偷学习C#,然后学习GIS二次开发之试题汇总(附答案)
  12. LINQ to SQL语句(1)之Where
  13. JS----window对象详解
  14. Atitit 提升可读性sql subquery udf 子查询 目录 1. 使用udf 和参数@简化join和subquery 1 1.1.1. 子查询分类 1 2. 2.1 按返回结果集分类
  15. 网页前端培训笔记(JavaScript基础语法篇一)
  16. O2O模式的赢利点有哪些?
  17. 自定义微信小程序TabBar
  18. 图像算法工程师的一般要求
  19. K - 一只小蜜蜂...
  20. leetcode——340.至多包含 K 个不同字符的最长子串

热门文章

  1. virtual hust 2013.6.20 数论基础题目 E - Uniform Generator
  2. 大数据_Flink_数据处理_运行时架构6_slot和并行度的关系---Flink工作笔记0021
  3. 大数据之-Hadoop3.x_MapReduce_序列化案例FlowMapper---大数据之hadoop3.x工作笔记0098
  4. axios_的默认配置_使用演示---axios工作笔记008
  5. @tap和@click的区别_计算属性---uview工作笔记001
  6. Sentinel降级_异常数_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0041
  7. 微服务升级_SpringCloud Alibaba工作笔记0016---Nacos之服务提供者注册
  8. STM32工作笔记0084---UCOSIII软件定时器
  9. Linux工作笔记035---linux内网测试访问外网网速_外网测试访问内网网速
  10. ISIS网络配置方法