使用 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(...)
(其中 ...
是您的字符串),为其生成代码并然后删除除文字以外的所有内容。
直截了当;有没有一种方法可以从字符串中生成有效的 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(...)
(其中 ...
是您的字符串),为其生成代码并然后删除除文字以外的所有内容。