静态编程语言有一个很好的特性,称为字符串模板。
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"?
静态编程语言的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
作为一种解决方法,有一个 Kotlin stdlib 函数,可以以一种很好的方式使用,并且与 Java 的字符串格式完全兼容(它只是围绕 Java 的字符串.format()
的包装器)
参见Kotlin的文档
您的代码将是:
val pi = 3.14159265358979323
val s = "pi = %.2f".format(pi)
不幸的是,还没有对字符串模板格式的内置支持,作为一种变通方法,您可以使用类似于:
"pi = ${pi.format(2)}"
您需要将自己定义为 .format(n)
函数
fun Double.format(digits: Int) = "%.${digits}f".format(this)
这仅适用于静态编程语言/JVM。
很明显,Kotlin 目前缺少一项功能,我们将修复它。
Kotlin有一个很好的特性,叫做字符串模板。我真的很喜欢。 但是否可以在模板中设置任何格式?例如,我想在kotlin中设置字符串模板中的Double格式,至少要在小数分隔符后设置一些位数:
我有一些本地化的字符串格式,格式参数的顺序不同。例如,我有短语synced 12 files on 6/29/2018,它将显示给用户。其中12和6/29/2018只是占位符。因此我的参考资料中的字符串看起来像 对于任何颠倒格式参数的语言,它都将崩溃。 我希望我可以使用Kotlin字符串模板,这样我的资源就可以定义为 这将允许翻译人员将单词按任何顺序排列,但根据这个链接,如何将模板应用于函数返回的
问题内容: 我想知道使用模板字符串而不是新的高级字符串格式是否有优势? 问题答案: 模板要比通常的字符串格式更简单,但会降低表达力。PEP 292 的基本原理将模板与Python的-style字符串格式进行了比较: Python当前支持基于C的‘%’格式字符的字符串替换语法。尽管格式非常丰富,但即使对于有经验的Python程序员,%格式的代码也容易出错。一个常见的错误是忽略了尾随的格式字符,例如i
我找不到如何用Kotlin语言将变量(或常量)的类型作为,像。如何完成这一点?
问题内容: 我看到许多人使用这样的格式字符串: 而不是像这样简单地串联字符串: 格式字符串是否具有更好的性能,还是仅用于外观? 问题答案: 这只是为了外观。您可以一眼看出格式是什么。我们中的许多人都比微优化更喜欢可读性。 让我们看看IPython的意思:
问题内容: 我正在开发一个应用程序,在其中执行一些请求以获取对象ID。在它们每个之后,我调用一个方法()将此id作为参数传递(请参见下面的代码)。 可以注意到,我正在将其转换为前缀并将其与前缀连接。但是,我知道我能做到这一点的多种其他方式(或者,例如),并在我的问题的结果:将超过字符串连接更好的可读性,代码约定和效率方面? 谢谢 问题答案: 这很容易成为基于意见的主题,但是我发现格式在大多数情况下
问题内容: 给定s的字典,我试图用每个数字格式化字符串,并对该项目进行复数处理。 样本输入: 样本输出: 它需要使用任意格式的字符串。 我想出的最好的解决方案是一个用于存储两个属性的类,(原始值)和(如果是复数则为字符串,如果不是则为空字符串)。为不同的多元方法分类 然后通过理解和映射制作一个新的: 最后,格式字符串和实现: 输出以下内容: 对于如此毫无疑问的普遍需求,我犹豫不决地使用如此复杂的解
问题内容: 是否可以使用类似于字符串模板功能的高级字符串格式化方法进行部分字符串格式化? 例如: 问题答案: 您可以通过覆盖映射将其欺骗为部分格式: 印刷 当然,此基本实现仅在基本情况下正确运行。