6. swift & kotlin之字符串

它们字符串定义和实现都是一样的

swift 定义

let str = "我是一个串"
let str = String("我是一个串")

kotlin 定义

val str = "我是一个串"
val str = String("我是一个串")

但是其他扩展用法来说 swift 更强大,我也觉得更好用

替换字符

swift

let number = 1
let str = "我是 \(number)条狗"

kotlin

var number = 1
var str = "我是 $number 条狗"

Groovy

def number = 1
def str = "我是 $number 条狗"

typescript

const number = 1
const str = `我是 ${number} 条狗`

通过对比可以发现,天下语言大同,唯独 typescript 搞特殊。
但是这里面的使用方法我更喜欢 kotlingroovy 的写法

多行字符串

这个地方我就是最喜欢 swift, 同时功能也是最强大的

let str = """
    siiidisid
    dfsjkdsjkdskj
        jkjkdkjdskjkdjs
"""
print(str)

输出结果是这样的

但是如果我把 """ 往后退一个 tab

let str = """
    siiidisid
    dfsjkdsjkdskj
        jkjkdkjdskjkdjs
"""
print(str)

输出结果就是这样的了

也就是说 swift 是根据最后的三冒号来决定你的缩进的,是不是很有意思。
如果你不想换行,还能通过加 \ 来让其中一句不换行

let str = """
    siiidisid\
    dfsjkdsjkdskj
        jkjkdkjdskjkdjs
    """
print(str)

这样当要输出一个特别长字符的时候就能很好的解决在代码中也非常长的问题了。

kotlin 和 groovy 支持三冒号定义长字符,并且也支持一swift这些功能

定义长字符串
kotlin

val content = """
            ahkdfakhfhsaks
        fdhkahfdksahkf
        adhkfkashkfsh
"""

输出

groovy

def content = """
            ahkdfakhfhsaks
        fdhkahfdksahkf
        adhkfkashkfsh
    """.stripIndent()

println(content)

输出

不过去掉前面的空格就没有 swift 那么魔法,需要手动调用一个方法
kotlin 需要调用 trimIndent()
groovy 则是 stripIndent()

代码如下
kotlin

val content = """
            ahkdfakhfhsaks
        fdhkahfdksahkf
        adhkfkashkfsh
""".trimIndent()
println(content)

输出

groovy


def content = """
            ahkdfakhfhsaks
        fdhkahfdksahkf
        adhkfkashkfsh
    """.stripIndent()

println(content)
```输出*
![-w661](media/15996627011558/16002708906488.jpg)

比较有趣的事情是,`groovy` 支持不换行 `\`
```groovy

def content = """
            ahkdfakhfhsaks\
        fdhkahfdksahkf
        adhkfkashkfsh
    """.stripIndent()
println(content)

但是 kotlin 不支持

但是两个都支持通过一个字符 ( 默认为| )作为锚点进行缩进,就是这样

kotlin

import java.io.File

val content = """
        |    ahkdfakhfhsaks
    |    fdhkahfdksahkf
       | adhkfkashkfsh
""".trimMargin()
println(content)

输出

groovy

def content = """
        |    ahkdfakhfhsaks
       |  fdhkahfdksahkf
        adhkfkashkfsh
    """.stripMargin()
println(content)

输出

typescript 估计未来支持吧。。反正我现在用的版本不支持

总结

三种语言的字符串使用基本相同,并没有什么大差异

kotlin 为什么会不支持不换行,这个也不知道是因为我不知道还是真的不支持