根据我的研究
Kotlin有两种类型的字符串文字:-
转义的字符串,其中可能已转义了字符。
val s = "Hello ,World\n" +
"from escaped string\n"+
"kotlin"
原始字符串由三引号(“”“)分隔,不包含转义符,并且可以包含换行符和任何其他字符:
val m = """Hello, World
|from raw string
|kotlin """.trimMargin()
这些字符串可以在多行中使用,而无需将每行连接在一起,并且无需转义。
我们使用原始字符串仅仅是为了简单和易于实现,还是在任何情况下它们都提供更好的性能?
还有其他应该考虑使用原始字符串的用例吗?
答案 0 :(得分:1)
您的答案在this website处得到了很好的解释。我将只在其中包括必要的部分。
String in Kotlin可以按上述链接中所述的多种方式使用。它完全取决于要使用的要求。如果您有超大字符串(如html页面等),则可以使用以三引号(“”“)分隔的原始字符串。 字符串,则可以使用转义的字符串。
这两者之间并没有真正的性能差异,但是取决于您在其中构建值时使用了多少字符串连接。
答案 1 :(得分:1)
用例:会议室查询中查询语法的着色
使用Kotlin的原始字符串,您可以在Room的Dao中的多行上编写查询,例如:
@Dao
interface HappyDao {
@Query(
"""
SELECT
One,
Two,
Three
FROM MYTABLE
"""
)
fun getAll(): List<MyObject>
}
并且仍然具有Room验证器的语法着色,就像您将所有内容都写在一行上一样(以及代码编写过程中有关查询语法错误的警报)。对于长查询,具有许多字段或联接的情况,它特别有用。
没有原始字符串,将是这样的:
@Dao
interface HappyDao {
@Query(
"SELECT" +
"One," +
"Two," +
"Three" +
" FROM MYTABLE"
)
fun getAll(): List<MyObject>
}
,并且不会使用Room的语法着色。
答案 2 :(得分:0)
我不知道两种字符串文字类型之间的性能差异,但是至少有一个有趣的用例,您应该考虑使用原始字符串:正则表达式。
预定义字符类和正则表达式中的许多其他构造由\
字符引入(例如\s
以匹配空白字符)。在将这些字符包含在字符串中时,您需要对它们进行转义:因此,对于正则表达式中的任何此类字符,都需要编写两个字符,例如"\\d"
以匹配单个数字。
但是,原始字符串使您可以跳过转义部分,从而比在Java中唯一的字符串文字类型被转义时所编写的正则表达式更简洁明了。
请注意,原始字符串不是新概念,也不是Kotlin引入的概念。例如,Python已经使用它们很长时间了。