使用 KotlinPoet 或类似软件;生成非原始 Kotlin 字符串文字

With KotlinPoet or similar; generating a non-raw Kotlin string literal

直截了当;有没有一种方法可以从字符串中生成有效的 Kotlin 字符串文字(非原始,如非三引号);我目前正在尝试使用 KotlinPoet.

来完成此操作

为清楚起见,示例输入:

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

期望的示例输出:

"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 的 ObjectMapper::writeValueAsString 完成一些功能上接近的事情,但是,我确信使用它来生成有效的 Kotlin 代码有很多注意事项。

遗憾的是,KotlinPoet中的相关函数is internal, or you could just call it with isConstantContext = true as in this test

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