Kotlin入门(5)字符串及其格式化
上一篇文章介绍了数组的声明和操作,包括字符串数组的用法。注意到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)字符串及其格式化的更多相关文章
- Kotlin入门教程——目录索引
Kotlin是谷歌官方认可的Android开发语言,Android Studio从3.0版本开始就内置了Kotlin,所以未来在App开发中Kotlin取代Java是大势所趋,就像当初Android ...
- python入门6 字符串拼接、格式化输出
字符串拼接方式 1 使用 + 拼接字符串 2 格式化输出:%s字符串 %d整数 %f浮点数 %%输出% %X-16进制 %r-原始字符串 3 str.format() 代码如下: #codin ...
- Kotlin入门(32)网络接口访问
手机上的资源毕竟有限,为了获取更丰富的信息,就得到辽阔的互联网大海上冲浪.对于App自身,也要经常与服务器交互,以便获取最新的数据显示到界面上.这个客户端与服务端之间的信息交互,基本使用HTTP协议进 ...
- 写给Android开发者的Kotlin入门
写给Android开发者的Kotlin入门 转 https://www.jianshu.com/p/bb53cba6c8f4 Google在今年的IO大会上宣布,将Android开发的官方语言更换为K ...
- Kotlin入门(9)函数的基本用法
上一篇文章介绍了Kotlin新增的空安全机制,控制语句部分可算是讲完了,接下来将连续描述Kotlin如何定义和调用函数,本篇文章先介绍函数的基本用法. 前面几篇文章介绍控制语句之时,在setOnCli ...
- Kotlin入门(11)江湖绝技之特殊函数
上一篇文章介绍了Kotlin对函数的输入参数所做的增强之处,其实函数这块Kotlin还有好些重大改进,集中体现在几类特殊函数,比如泛型函数.内联函数.扩展函数.尾递归函数.高阶函数等等,因此本篇文章就 ...
- Kotlin入门(15)独门秘笈之特殊类
上一篇文章介绍了Kotlin的几种开放性修饰符,以及如何从基类派生出子类,其中提到了被abstract修饰的抽象类.除了与Java共有的抽象类,Kotlin还新增了好几种特殊类,这些特殊类分别适应不同 ...
- python3入门之字符串
获得更多资料欢迎进入我的网站或者 csdn或者博客园 经过前面的介绍相信大家也对python有了一个初步的了解:本节主要介绍字符串,不管学习什么编语言字符串一定在其中扮演着重要的地位.本节主要讲解,字 ...
- yield生成器及字符串的格式化
一.生成器 def ran(): print('Hello world') yield 'F1' print('Hey there!') yield 'F2' print('goodbye') yie ...
随机推荐
- Win10手记-为应用集成日志工具Logger
日志工具由来已久,是很受大家欢迎的debug工具.其中.NET平台上很出名的是log4net,但是由于Windows 10通用应用项目没有了System.Configuration引用,所以也就不能很 ...
- 调用 Https WebService 使用程序自动生成代理类
1 商家提供的WebService接口: https://ws.nciic.org.cn/nciic_ws/services/NciicServices?wsdl 2 在浏览器里打开这个地址,会显示 ...
- HW2018校招研发笔试编程题
1. 数字处理 题目描述:给出一个不多于5位的整数,进行反序处理,要求 (1)求出它是几位数 (2)分别输出每一个数字(空格隔开) (3)按逆序输出各位数字(仅数字间以空格间隔,负号与数字之间不需要间 ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十五):系统服务监控
系统服务监控 新建监控工程 新建Spring Boot项目,取名 kitty-monitor,结构如下. 添加项目依赖 添加 spring boot admin 的相关依赖. pom.xml < ...
- Docker基本命令汇总
Docker的三大核心概念:镜像.容器.仓库 镜像:类似虚拟机的镜像.用俗话说就是安装文件. 容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例,可以将其启动.开始.停止.删除.而这些容器都是相 ...
- 将tomcat添加为linux系统服务
前言 在博客 --> virtualBox安装centos,并搭建tomcat中,讲到了centos下搭建tomcat环境,发现启动tomcat不是那么方便,要是忘记路径了,那就更麻烦了!当然了 ...
- Linux 安装 JDK
本篇博客用于记录一下在 Linux 系统下安装 Java 环境. 在大部分的 Linux 系统中都有安装 Open JDK,所以最好是先卸载 Open JDK 后在进行我们的 JDK 安装.Open ...
- JavaWeb学习 (六)————Servlet(二)
一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...
- python文件处理b模式
执行环境:windows+Python3.51.rb模式,从文件中读取内容,得到的是bytes类型 因为我们使用的是b模式,所以在open函数中不能指定编码格式,所以打印出来的格式的二进制的格式,而我 ...
- [NOI 2017]蔬菜
Description 题库链接 小 N 是蔬菜仓库的管理员,负责设计蔬菜的销售方案. 在蔬菜仓库中,共存放有 \(n\) 种蔬菜,小 N 需要根据不同蔬菜的特性,综合考虑各方面因素,设计合理的销售方 ...