代码之家  ›  专栏  ›  技术社区  ›  Kaveri

原始字符串,它们与转义字符串有何不同,应该在哪里使用它们

  •  0
  • Kaveri  · 技术社区  · 6 年前

    Kotlin有两种类型的字符串文字:-

    转义字符串

    val s = "Hello ,World\n" +
        "from escaped string\n"+
        "kotlin"
    

    原始字符串 由三个引号(“”)分隔,不包含转义,并且可以包含换行符和任何其他字符:

    val m = """Hello, World
           |from raw string
           |kotlin """.trimMargin()
    

    我们使用原始字符串只是为了简单和易于实现,还是在任何情况下都能提供更好的性能?

    2 回复  |  直到 6 年前
        1
  •  5
  •   Rahul Khurana steve    6 年前

    你的答案在这里解释得很清楚 this website

    String in Kotlin 可按上述链接中所述的多种方式使用。这完全取决于使用的要求。如果你有 特大号 像html页面等字符串,然后你可以去 原始字符串 由三个引号(“”)分隔。在你拥有的地方 短的 然后你可以用 转义字符串 .

    这两者之间并没有真正的性能差异,而是取决于在其中构建值时使用了多少字符串连接。

        2
  •  2
  •   Giulio Piancastelli    6 年前

    我不知道这两种字符串文字类型之间有什么性能差异,但至少有一个有趣的用例,您应该考虑使用原始字符串:正则表达式。

    正则表达式中的预定义字符类和许多其他构造是由 \ 字符(例如。 \s 匹配空白字符)。在字符串中包含这些字符时,需要对它们进行转义:因此,对于正则表达式中的任何此类字符,都需要编写两个,例如 "\\d" 匹配一个数字。

    但是,原始字符串允许您跳过转义部分,从而产生比在转义唯一的字符串文本类型时编写的正则表达式更干净、更简洁的正则表达式,就像在Java中发生的那样。

        3
  •  1
  •   Simone    6 年前

    使用Kotlin的原始字符串,您可以在Room的Dao中的多行上编写查询,例如:

    @Dao
    interface HappyDao {
        @Query(
                """
                SELECT
                One,
                Two,
                Three
                FROM MYTABLE
                """
        )
        fun getAll(): List<MyObject>
    }
    

    就像在一行中编写所有内容一样(以及在编写代码时有关查询语法错误的警报)。对于长查询、许多字段或联接,它特别有用。

    如果没有原始字符串,它将是这样的:

    @Dao
    interface HappyDao {
        @Query(
                "SELECT" +
                "One," +
                "Two," +
                "Three" +
                " FROM MYTABLE"
        )
        fun getAll(): List<MyObject>
    }
    

    而且这对房间的语法着色也没有好处。