模板字符串

Kotlin 字符串模板与 String.format()

Kotlin 的字符串模板是一种强大的格式化字符串的工具,但它在处理数值打印时有一定的局限。这时就可以使用 String.format() 函数,它提供了更灵活的格式化方式。


基本语法与通用字符串格式说明符

在 Kotlin 中,String.format() 方法可以通过格式字符串和一组参数返回格式化后的字符串。例如:

val string = String.format("%s %s", "Hello", "World")
println(string)
// 输出:Hello World

解释:

  • "%s %s" 是格式字符串,其中 %s 是格式说明符,代表字符串类型;

  • 每个 %s 对应一个后续参数,依次被 "Hello""World" 替换;

  • %s(小写)或 %S(大写)都可以用来插入字符串参数。


可选语法

val string = "%s %s".format("Hello", "World")
println(string)
// 输出:Hello World

解释:

Kotlin 允许将 format() 直接调用在字符串上,作用相同。


使用 %S 输出大写字符串:

val string = String.format("%S %S", "Hello", "World")
println(string)
// 输出:HELLO WORLD

参数顺序与转义符

可以通过 %n$ 来改变参数顺序,例如:

val str1 = "Kotlin"
val str2 = "the best language"

var str = String.format("%1\$s is %2\$s", str1, str2)
println(str) // 输出:Kotlin is the best language

str = String.format("%2\$s is %1\$s", str1, str2)
println(str) // 输出:the best language is Kotlin

**注意:**由于 $ 是 Kotlin 的模板语法符号,需要使用 \$ 进行转义。


特殊格式说明符

  • %%:插入 % 符号;

  • %n:插入换行(依系统不同可能是 \r\n\n);

  • 建议使用 \n 获取更可控的行为。

println(String.format("The percentage of%nthis amount is 30%%.\nIt is easy to remember."))

输出:

The percentage of
this amount is 30%.
It is easy to remember.

宽度与对齐

默认字符串右对齐,如:

val str = "string"
for (n in 1..15) println("%${n}s".format(str))

输出:

string
 string
  string
   ...

左对齐示例:

val s1 = String.format("%8s %8s", "Hello", "World")
println(s1) //    Hello    World

val s2 = String.format("%-8s %-8s", "Hello", "World")
println(s2) // Hello    World   

整数格式化(%d)
val int1 = 1234
val int2 = -4567

println(String.format("%d", int1))       // 1234
println(String.format("%8d", int1))      //     1234
println(String.format("%-8d", int1))     // 1234    
println(String.format("%+d", int1))      // +1234
println(String.format("%+d", int2))      // -4567
println(String.format("%09d", int1))     // 000001234
println(String.format("%,10d", int1))    //     1,234
println(String.format("%+,010d", int1))  // +00001,234
println(String.format("%-+,10d", int1))  // +1,234    
println(String.format("% d", int1))      //  1234
println(String.format("% d", int2))      // -4567
println(String.format("%(d", int2))      // (4567)

八进制与十六进制格式化(%o、%x、%X)
val int1 = 3465
val int2 = -7896

println(String.format("%o", int1))     // 6611
println(String.format("%o", int2))     // 37777760450
println(String.format("%#o", int1))    // 06611
println(String.format("%x", int1))     // d89
println(String.format("%X", int2))     // FFFFE128
println(String.format("%#X", int1))    // 0XD89

浮点数格式化(%f)
val double1 = 1234.5678
val double2 = -1234.5678

println(String.format("%f", double1))      // 1234.567800
println(String.format("%+f", double1))     // +1234.567800
println(String.format("%,f", double1))     // 1,234.567800
println(String.format("%15.2f", double1))  //        1234.57
println(String.format("%.3f", double1))    // 1234.568

科学计数法(%e、%E)
println(String.format("%e", double1))      // 1.234568e+03
println(String.format("%E", double2))      // -1.234568E+03
println(String.format("%.9E", double1))    // 1.234567800E+03

自动选择简洁表示(%g、%G)
val double1 = 1000.0
val double2 = 10000000.0

println(String.format("%g", double1))  // 1000.00
println(String.format("%g", double2))  // 1.00000e+07

布尔值与字符
val boolean = true
println(String.format("%b", boolean))  // true
println(String.format("%B", boolean))  // TRUE

val char = 'a'
println(String.format("%c", char))     // a
println(String.format("%C", char))     // A

格式说明符总结表

格式说明符参数类型输出格式
%s任意类型字符串表示
%d整数类型十进制整数
%o / %#o整数类型八进制(可带前缀 0)
%x / %X整数类型十六进制
%f浮点类型十进制浮点
%e / %E浮点类型科学记数法
%g / %G浮点类型自动选择最短形式
%b / %BBoolean布尔值
%c / %CChar字符
%n-换行符
%%-百分号 %

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值