Kotlin 字符串模板中的格式
Posted
技术标签:
【中文标题】Kotlin 字符串模板中的格式【英文标题】:Format in Kotlin string templates 【发布时间】:2014-05-29 23:01:32 【问题描述】:Kotlin 有一个很棒的特性,叫做字符串模板。
val i = 10
val s = "i = $i" // evaluates to "i = 10"
但是模板中可以有任何格式吗?比如我想在kotlin的字符串模板中格式化Double,至少要设置小数点分隔符后的位数:
val pi = 3.14159265358979323
val s = "pi = $pi??" // How to make it "pi = 3.14"?
【问题讨论】:
是否有任何多平台解决方案? 【参考方案1】:不幸的是,在字符串模板中还没有对格式化的内置支持,作为一种解决方法,您可以使用类似的东西:
"pi = $pi.format(2)"
.format(n)
函数,您需要将自己定义为
fun Double.format(digits: Int) = "%.$digitsf".format(this)
目前 Kotlin 显然缺少一个功能,我们会修复它。
【讨论】:
现在可以使用了吗? @RagunathJawahar,答案仍然是最新的,我们还没有改进 @AndreyBreslav 现在怎么样?这个可以吗? 是我弄错了还是将近 4 年后仍然无法使用? 添加为 2020 年的新年礼物!【参考方案2】:作为一种解决方法,There is a Kotlin stdlib function 可以很好地使用并与 Java 的字符串格式完全兼容(它只是 Java 的 String.format()
的包装器)
查看 Kotlin 的 documentation
您的代码将是:
val pi = 3.14159265358979323
val s = "pi = %.2f".format(pi)
【讨论】:
我猜他的意思是这个文档:docs.oracle.com/javase/8/docs/api/java/lang/… @Rob 另请参阅文档中的discussion 在 Kotlin 1.3.21 中工作【参考方案3】:Kotlin 的 String 类现在有一个 format 函数,内部使用 Java 的 String.format
方法:
/**
* Uses this string as a format string and returns a string obtained by substituting the specified arguments,
* using the default locale.
*/
@kotlin.internal.InlineOnly
public inline fun String.Companion.format(format: String, vararg args: Any?): String = java.lang.String.format(format, *args)
用法
val pi = 3.14159265358979323
val formatted = String.format("%.2f", pi) ;
println(formatted)
>>3.14
【讨论】:
String.Companion.format 现在在 Kotlin v1.2.21 中找不到。有什么替代方案?。【参考方案4】:由于String.format
只是一个内部调用java.lang.String.format
的扩展函数(参见here),如果您需要更大的灵活性,您可以使用Java 的DecimalFormat 编写自己的扩展函数:
fun Double.format(fracDigits: Int): String
val df = DecimalFormat()
df.setMaximumFractionDigits(fracDigits)
return df.format(this)
println(3.14159.format(2)) // 3.14
【讨论】:
【参考方案5】:很简单,使用:
val str: String = "%.2f".format(3.14159)
【讨论】:
【参考方案6】:几个例子:
infix fun Double.f(fmt: String) = "%$fmt".format(this)
infix fun Double.f(fmt: Float) = "%$if (fmt < 1) fmt + 1 else fmtf".format(this)
val pi = 3.14159265358979323
println("""pi = $pi f ".2f"""")
println("pi = $pi f .2f")
【讨论】:
【参考方案7】:它具有字符串格式 示例:
fun printSum(a: Int, b: Int): Unit
println("sum of $a and $b is $a + b")
【讨论】:
以上是关于Kotlin 字符串模板中的格式的主要内容,如果未能解决你的问题,请参考以下文章