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
搞特殊。
但是这里面的使用方法我更喜欢 kotlin
和 groovy
的写法
多行字符串
这个地方我就是最喜欢 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 为什么会不支持不换行,这个也不知道是因为我不知道还是真的不支持