最近在 http://portal.kotlin-academy.com/#/ 上看到很多关于 Kotlin 的有趣的题目。个人觉得很适合 Kotlin 爱好者,感兴趣的小伙伴可自行查阅。
【有趣的 Kotlin 】系列记录自己对每一题的理解。

0x02:Indent trimming

fun main(args: Array<String>) {val world = "multiline world"println("""Hello\$world""".trimIndent())
}

以上代码,运行结果是什么?可选项:

  1. Hello
    $world
  2. Hello
       $world
  3. Hello
    \multiline world
  4. doesn’t compile

思考一下,记录下你心中的答案。

分析

  1. Kotlin 中的 Raw String 是用 """ 三个双引号包裹的;
  2. Kotlin 中的 Raw String 包含非转义字符、新行符,以及其它任意字符。也就是说,题中的 \ 转义字符会被当成普通字符处理;
  3. $ 符号表示处理字符串模板表达式;
  4. 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相关推荐

  1. Kotlin鱿鱼游戏大奖赛

    点击上方蓝字关注我,知识会给你力量 鱿鱼游戏来了,现在开始,看看你闯过第几关. 在不借助IDE的情况下,看你的人肉编译器能否编译出正确的结果. Scala-like functions fun hel ...

  2. Kotlin之美——DSL篇 和 如何让你的回调更具Kotlin风味

    如何让你的回调更具Kotlin风味 https://mp.weixin.qq.com/s?__biz=MzAwOTQ4Mzk2Nw==&mid=2458585682&idx=1& ...

  3. Notes Twelfth Day-渗透攻击-红队-命令与控制

    ** Notes Twelfth Day-渗透攻击-红队-打入内网(dayu) ** 作者:大余 时间:2020-09-28 请注意:对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透 ...

  4. Vim插件之vim-polyglot

    vim-polyglot,属于开箱即用型的语法高亮包,支持下面这些语言 ansible (syntax, indent, ftplugin) apiblueprint (syntax) applesc ...

  5. Kotlin极简教程:第4章 基本数据类型与类型系统

    原文链接:https://github.com/EasyKotlin 到目前为止,我们已经了解了Kotlin的基本符号以及基础语法.我们可以看出,使用Kotlin写的代码更简洁.可读性更好.更富有生产 ...

  6. Kotlin基本语法和使用

    Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发.与Java相比,Kotlin的语法更简洁.更具表达性,而且提供了更多的特性. Kotlin是使用Java开发者的思维被创 ...

  7. kotlin ++ --_顺便说一句-探索Kotlin代表团

    kotlin ++ -- by Adam Arold 亚当·阿罗德(Adam Arold) 顺便说一句-探索Kotlin代表团 (By the way - exploring delegation i ...

  8. 超越Android:Kotlin在后端的工作方式

    by Adam Arold 亚当·阿罗德(Adam Arold) 超越Android:Kotlin在后端的工作方式 (Going Beyond Android: how Kotlin works on ...

  9. Java 24岁!Google加持的Kotlin真能取代它?

    作者 | 屠敏 出品 | CSDN(ID:CSDNnews) 1995 年 5 月 23 日,Sun 公司在 Sun world 会议上正式宣布了 Java 的到来,从此一代编程语言界的翘楚就此诞生. ...

  10. 为什么 Java 后端开发没有大规模采用 Kotlin?

    点击关注公众号,Java干货及时送达 转自:InfoQ 作者:Ivan Sanchez,  译者:王者 链接:www.infoq.cn/article/dSSYAFSMMxx1sZkJwrN2 在使用 ...

最新文章

  1. CentOS 7.8下安装完美安装配置Rosetta
  2. sklearn使用FeatureHasher处理字符串特征: AttributeError: ‘str‘ object has no attribute ‘items‘
  3. 2017瞻博网络年会隆重召开 重点发力电信和OTT两大市场
  4. 接力黄琨儿同志的《给玩命工作却对现状不满的IT人》
  5. 可以分屏的软件_分享一款非常好用,且小巧的分屏软件
  6. python代码案例详解-Python实现电视里的5毛特效实例代码详解
  7. java1002java,疯狂java学习笔记1002---抽象类及接口
  8. 我和我的广告前端代码(六):webpack工程合并、也许我不需要gulp
  9. 对比vector、deque、list的优缺点
  10. 情怀无价!诺基亚225 4G正式开售:320元
  11. “苹果税”猛于虎惹众怒,库克:我们是不会让步的
  12. c语言网络定向拉取数据,用C模拟了一个http请求,但是recv函数接收的数据不完整且欠安顺序获取信息...
  13. linux系统计时,关于linux:计算机系统中的计时机制
  14. windows下载mysql太慢
  15. jrtplib库移植到android上
  16. python got an unexpected keyword argument
  17. Zabbix主页应用介绍
  18. 一些关于ROS的讨论 Robot Operating System – A flexible framework for writing robot software (ros.org)
  19. ArcGIS分级显示
  20. SwiftUI 让用户更便捷在 App Store 为 App 打分和评价的超详细介绍

热门文章

  1. 增删改查以及冒泡算法的综合案例
  2. 条形码怎么看?一文带你认识!
  3. 单片机Fault故障常见应对办法
  4. JS仿写刮刮乐小例子
  5. maya餐具图片_有哪些价格低但是逼格高很文艺又实用的物品呢?
  6. 360导航底部的效果html,jQuery仿360导航页图标拖动排序效果代码分享
  7. 用爬虫模拟登陆urp教务处系统
  8. css/js解决 页面多次点击时出现部分蓝色
  9. win10系统怎么安装ie11
  10. 职等你来 | UE/UX交互设计师(15k);时钟AE工程师;数字IC验证工程师(薪资开放)