有趣的 Kotlin 0x02:Indent trimming
最近在 http://portal.kotlin-academy.com/#/ 上看到很多关于 Kotlin 的有趣的题目。个人觉得很适合 Kotlin 爱好者,感兴趣的小伙伴可自行查阅。
【有趣的 Kotlin 】系列记录自己对每一题的理解。
0x02:Indent trimming
fun main(args: Array<String>) {val world = "multiline world"println("""Hello\$world""".trimIndent())
}
以上代码,运行结果是什么?可选项:
- Hello
$world - Hello
$world - Hello
\multiline world - doesn’t compile
思考一下,记录下你心中的答案。
分析
- Kotlin 中的 Raw String 是用
"""
三个双引号包裹的; - Kotlin 中的 Raw String 包含非转义字符、新行符,以及其它任意字符。也就是说,题中的
\
转义字符会被当成普通字符处理; $
符号表示处理字符串模板表达式;trimIndent()
会检测所有输入行的通用最小缩进,将其从每一行中删除。
经过上述分析,题目转义字符失效,字符串模板替换 world
变量,再结合trimIndent
函数去掉缩进,答案很明显为
选项3:
Hello
\multiline world
总结
转义字符串
Kotlin 中我们常用的字符串基本都是用 "
单个双引号包裹的转移字符串。
支持转义字符,也支持字符串模板表达式 ,表达式运行结果拼接至字符串内表达式所在位置。
例如:
val love = "OpenCV \nor Android"
println("I Love $love")
println("I Love \$love")
运行结果就是:
I Love OpenCV
or Android
I Love $love
原始字符串
Kotlin 中被 """
三个双引号包裹的内容为原始字符串(Raw String),不支持转义字符,支持字符串模板表达式。
例如:
val love = "OpenCV \nor Android"
println("""I Love $love""")
println("""I Love \$love""")
运行结果如下:
I Love OpenCV
or Android
I Love \OpenCV
or Android
在看看 trim()
、 trimIndent()
、trimMargin()
val spaceTrim = """YesNoOther
""".trim()
println(spaceTrim)val spaceTrimMargin = """YesNoOther
""".trimMargin()
println(spaceTrimMargin)val spaceTrimIndent = """YesNoOther
""".trimIndent()
println(spaceTrimIndent)
运行结果如下:
把 trimMargin()
拿出来单独看看,源码如下:
public fun String.trimMargin(marginPrefix: String = "|"): String =replaceIndentByMargin("", marginPrefix)
参数 marginPrefix
默认参数为|
。将其作为边界字符,方便原始字符串整理对齐。具体看下面几个例子:
val marginOne = """|Yes|No|Other
""".trimMargin()
println(marginOne)val marginTwo = """>Yes>No>Other
""".trimMargin()
println(marginTwo)val marginThree = """>Yes>No>Other
""".trimMargin(">")
println(marginThree)
运行结果如下:
Yes
No
Other>Yes>No>Other
Yes
No
Other
有趣的 Kotlin 0x02:Indent trimming相关推荐
- Kotlin鱿鱼游戏大奖赛
点击上方蓝字关注我,知识会给你力量 鱿鱼游戏来了,现在开始,看看你闯过第几关. 在不借助IDE的情况下,看你的人肉编译器能否编译出正确的结果. Scala-like functions fun hel ...
- Kotlin之美——DSL篇 和 如何让你的回调更具Kotlin风味
如何让你的回调更具Kotlin风味 https://mp.weixin.qq.com/s?__biz=MzAwOTQ4Mzk2Nw==&mid=2458585682&idx=1& ...
- Notes Twelfth Day-渗透攻击-红队-命令与控制
** Notes Twelfth Day-渗透攻击-红队-打入内网(dayu) ** 作者:大余 时间:2020-09-28 请注意:对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透 ...
- Vim插件之vim-polyglot
vim-polyglot,属于开箱即用型的语法高亮包,支持下面这些语言 ansible (syntax, indent, ftplugin) apiblueprint (syntax) applesc ...
- Kotlin极简教程:第4章 基本数据类型与类型系统
原文链接:https://github.com/EasyKotlin 到目前为止,我们已经了解了Kotlin的基本符号以及基础语法.我们可以看出,使用Kotlin写的代码更简洁.可读性更好.更富有生产 ...
- Kotlin基本语法和使用
Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发.与Java相比,Kotlin的语法更简洁.更具表达性,而且提供了更多的特性. Kotlin是使用Java开发者的思维被创 ...
- kotlin ++ --_顺便说一句-探索Kotlin代表团
kotlin ++ -- by Adam Arold 亚当·阿罗德(Adam Arold) 顺便说一句-探索Kotlin代表团 (By the way - exploring delegation i ...
- 超越Android:Kotlin在后端的工作方式
by Adam Arold 亚当·阿罗德(Adam Arold) 超越Android:Kotlin在后端的工作方式 (Going Beyond Android: how Kotlin works on ...
- Java 24岁!Google加持的Kotlin真能取代它?
作者 | 屠敏 出品 | CSDN(ID:CSDNnews) 1995 年 5 月 23 日,Sun 公司在 Sun world 会议上正式宣布了 Java 的到来,从此一代编程语言界的翘楚就此诞生. ...
- 为什么 Java 后端开发没有大规模采用 Kotlin?
点击关注公众号,Java干货及时送达 转自:InfoQ 作者:Ivan Sanchez, 译者:王者 链接:www.infoq.cn/article/dSSYAFSMMxx1sZkJwrN2 在使用 ...
最新文章
- CentOS 7.8下安装完美安装配置Rosetta
- sklearn使用FeatureHasher处理字符串特征: AttributeError: ‘str‘ object has no attribute ‘items‘
- 2017瞻博网络年会隆重召开 重点发力电信和OTT两大市场
- 接力黄琨儿同志的《给玩命工作却对现状不满的IT人》
- 可以分屏的软件_分享一款非常好用,且小巧的分屏软件
- python代码案例详解-Python实现电视里的5毛特效实例代码详解
- java1002java,疯狂java学习笔记1002---抽象类及接口
- 我和我的广告前端代码(六):webpack工程合并、也许我不需要gulp
- 对比vector、deque、list的优缺点
- 情怀无价!诺基亚225 4G正式开售:320元
- “苹果税”猛于虎惹众怒,库克:我们是不会让步的
- c语言网络定向拉取数据,用C模拟了一个http请求,但是recv函数接收的数据不完整且欠安顺序获取信息...
- linux系统计时,关于linux:计算机系统中的计时机制
- windows下载mysql太慢
- jrtplib库移植到android上
- python got an unexpected keyword argument
- Zabbix主页应用介绍
- 一些关于ROS的讨论 Robot Operating System – A flexible framework for writing robot software (ros.org)
- ArcGIS分级显示
- SwiftUI 让用户更便捷在 App Store 为 App 打分和评价的超详细介绍