我写了一个读取文本文件的代码。文本文件包含我想替换的占位符。替换不会以这种方式工作,并且字符串与占位符一起打印。这是我为此编写的代码:
class TestSub(val sub: Sub) {
fun create() = template()
fun template() = Files.newBufferedReader(ClassPathResource(templateId.location).file.toPath()).readText()
}
data class Sub(val name: String, val age: Int)
Run Code Online (Sandbox Code Playgroud)
这是尝试打印最终字符串的主要函数:
fun main(args: Array<String>) {
val sub = Sub("Prashant", 32)
println(TestSub(sub).create())
}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用字符串而不是读取文件时,以下代码有效(替换fun template())
fun template() = "<h1>Hello ${sub.name}. Your age is ${sub.age}</h1>"
Run Code Online (Sandbox Code Playgroud)
有没有办法在读取文件内容时使字符串替换工作?
Zoe*_*Zoe 10
Kotlin 不支持来自文件的字符串模板。即代码之类的"some variable: $variable"被编译为"some variable: " + variable. 字符串模板在编译时处理,这意味着它不适用于从文件加载的文本,或者如果您执行其他操作将字符串转义为原始形式。无论哪种方式,正如danielspaniol 所提到的,它都会成为安全威胁。
剩下三个选项:
String.format(str)MessageFormat.format(str)我不知道您的文件包含什么,但如果它是您在模板函数中使用的字符串,请将其更改为:
<h1>Hello {0}. Your age is {1,integer}</h1>
Run Code Online (Sandbox Code Playgroud)
这是为了MessageFormat,这是我个人的喜好。如果您使用String.format,请改用%s其他适当的格式。
现在,在MessageFormat.format:
val result = MessageFormat.format(theString, name, age);
Run Code Online (Sandbox Code Playgroud)
请注意,如果使用MessageFormat,则需要转义'为''。看到这个。
| 归档时间: |
|
| 查看次数: |
8291 次 |
| 最近记录: |