2

直截了当; 有没有办法从字符串生成有效的 Kotlin 字符串文字(非原始,如非三引号);我目前正在尝试使用KotlinPoet来完成此任务。

为清楚起见,示例输入:

Hello, how are you?
I'm doing "great"!
I hope you are too!
It'll cost you $2.

所需的示例输出:

"Hello, how are you?\nI'm doing \"great\"!\nI hope you are too!\nIt'll cost you \$2."

使用 KotlinPoet,迄今为止我从 API 中学到的最好的方法是:

"""
|Hello, how are you?
|I'm doing "great"!
|I hope you are too!
|It'll cost you ${'$'}2.
|""".trimMargin()

这虽然是功能性的,但不是我想要实现的。


我已经能够用 Jackson's 完成一些功能上接近的事情ObjectMapper::writeValueAsString,但是,我确信使用它来生成有效的 Kotlin 代码有很多警告。

4

1 回答 1

1

不幸的是,KotlinPoet 中的相关函数internalisConstantContext = true,或者你可以像在这个测试中那样调用它。

因此,作为一种解决方法,您可以将字符串放在一个常量上下文中,例如const val x = ...@A(...)...您的字符串在哪里),为其生成代码,然后删除除文字之外的所有内容。

于 2020-02-19T08:13:59.727 回答