ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### **字符串模板:让字符串输出更容易** [TOC] #### **java字符串格式化——[String.format()](https://www.w3cschool.cn/doc_kotlin/kotlin-api-latest-jvm-stdlib-kotlin-text-format.html?lang=en)** 在java中,可以通过String类中的format方法对字符串进行格式化和拼接相关操作。 format方法有两种重载形式: * `inline fun String.Companion.format(format: String, vararg args: Any?): String `新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。 * `inline fun String.Companion.format(locale: Locale, format: String, vararg args: Any?): String` 使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。 format方法通常需要和转换字符进行配合实现不同数据类型到字符串的转换,下表列举部分转换字符串: | 转换符 | 说明| 示例 | | ------------------------------- | ----------------------- | ---------------------- | | %s                              | 字符串类型                   | "mingrisoft"           | | %c                              | 字符类型                    | 'm'                    | | %b                              | 布尔类型                    | TRUE                   | | %d                              | 整数类型(十进制)               | 99                     | | %x                              | 整数类型(十六进制)              | FF                     | | %o                              | 整数类型(八进制)               | 77                     | | %f                              | 浮点类型                    | 99.99                  | | %a                              | 十六进制浮点类型                | FF.35AE                | | %e                              | 指数类型                    | 9.38E+05               | | %g                              | 通用浮点类型(f和e类型中较短的)       |                        | | %h                              | 散列码                     |                        | | %%                              | 百分比类型                   | %                      | | %n                              | 换行符                     |                        | | %tx                             | 日期与时间类型(x代表不同的日期与时间转换符  |                        | 我们通过一个案例简单的演示一下,参考代码: >[info]注意:下面的代码是Java中代码,实际效果和kotlin一样 ![](https://i.loli.net/2019/04/18/5cb897e558e43.png) 可以看出,java支持丰富的字符串输出格式。可能唯一不太好的地方就是转义字符太多,不方便记忆。 ### **什么是字符串模板**? 字符串可以包含模板表达式。所谓的模板表达式就是在字符串中添加占位符,字符串模板表达式由`${变量名/函数/表达式}`组成,也可以省略{},例如“`$变量名`”。 Kotlin的字符串输出函数是println和print,相比Java的System.out.println以及System.out.print代码量还是要少那么一点。 **Kotlin针对字符串拼接和格式化输出,则是使用了字符串模板技术,针对格式简单的字符串输出,字符串模板显得更加方便。** ### **字符串模板使用的4种方式** #### 1)**在字符串中进行变量输出,语法格式:${变量}**,参考代码: ~~~ fun main(args: Array<String>) { var a = 1 var s1 = "a is ${a}"//a是一个变量 println(s1) } ~~~ 运行结果 ``` a is 1 Process finished with exit code 0 ``` #### 2) **在字符串中进行变量输出,可以省去大括号,语法格式:$变量**,当表达式仅有一个变量的时候,还可以将两边的大括号省略 参考代码: ~~~ fun main(args: Array<String>) { var a = 1 var s1 = "a is ${a}"//a是一个变量 //语法格式$变量,省去了大括号 var s2 = "a is $a"//有时可以省去大括号,有时必须要大括号 println(s1) println(s2) } ~~~ 运行结果 ``` a is 1 a is 1 Process finished with exit code 0 ``` #### 3)**在字符串中调用其他方法,语法格式:${方法()}**,参考代码: ~~~ fun main(args: Array<String>) { var a = 1 var s1 = "a is ${a}"//a是一个变量 //语法格式$变量,省去了大括号 var s2 = "a is $a"//有时可以省去大括号,有时必须要大括号 println(s1) println(s2) //语法格式:${方法()} println("${helloWorld()}") var s3 = "a is 1" //语法格式:${表达式},执行表达式, var s4 = "${s3.replace("is", "was")}"//lambda表达式 println(s4) } fun helloWorld(): String { return "hello world" } ~~~ 运行结果 ``` a is 1 a is 1 hello world a was 1 Process finished with exit code 0 ``` #### 4)**在字符串中执行表达式, 语法格式:${表达式}**,参考代码: 代码如第三点中代码所示 #### 5) **原生字符串中使用模板表达式** 在原生字符串中,使用模板表达式输出$需要使用${'$'},由于原生字符串中不支持反斜杠转义“\$”,因此在原生字符串中如果想要使用模板表达式输出$字符只能使用${'$'}。 ``` fun main(args: Array<String>) { val price = """${'$'}8.88""" println(price) } ``` 运行结果 ``` $8.88 ```