智能字符串是标准字符串的更强大版本。它具有支持多行字符串、无需转义引号、支持字符串插值三个优点。
智能字符串以 $" 开头,以 "$" 结尾,返回标准字符串。
示例:
Dim s As String=$"My name is"$
Dim s1 As String=$"${s}:Jety"$
Log(s1) 输出:My name is}:Jety
Dim s2 As String=$"使用智能字符串无需转义“引号”!"$
Log(s2) 输出:使用智能字符串无需转义“引号”!
一、字符串插值
智能字符串可以保存零个或多个带有代码的占位符。占位符可以轻松格式化。占位符以 $[可选格式化程序]{ 开头,以 } 结尾:
Log($"5 * 3 = ${5 * 3}"$)
输出结果:5 * 3 = 15
您可以在占位符内放置任何您喜欢的代码,如:变量、表达式。
Dim x = 1, y = 2, z = 4 As Int
Log($"x = ${x}, y = ${y}, z = ${Sin(z)}"$)
输出结果:x = 1, y = 2, z = -0.7568024953079282
这是一个编译时功能。您无法从文件加载智能字符串源码。
二、数字格式化程序
数字格式化程序允许您设置整数的最小位数和小数的最大位数。它类似于关键字 NumberFormat 。
语法:$ MinIntegers.MaxFractions{数字表达式}
其中:
MinIntegers是整数部分最小位数,如果大于数字表达式值的整数位数,则在整数前用0补足,使整数位数和MinIntegers相等;如果小于数字表达式的整数位数,则忽略。
MaxFractions是小数部分的最大位数,如果大于数字表达式值的小数位数,则忽略,如果小于数字表达式值的小数位数,则四舍五入保留MaxFractions个小数位。
如果不使用MinIntegers.MaxFractions,则直接输出数字表达式值的字符串形式;如果仅限定整数的最小位数,则仅用MinIntegers;如果仅限定小数位数,则MinIntegers小于等于整数位数即可,也可使用0.MaxFractions。
注意:智能字符串输出的数字格式默认带有千位分隔符,如果不想其带有千位分隔符,可用replace去掉。
示例:
Dim s1 As String=$"$3{12345.3456}"$
Log(s1.Replace(",","")) ' 输出结果:12345.3456
s1=$"$3{12345.3456}"$
Log(s1.Replace(",","")) ' 输出结果:12345.3456
s1=$"$8{12345.3456}"$
Log(s1.Replace(",","")) ' 输出结果:00012345.3456
s1=$"$3.5{12345.3456}"$
Log(s1.Replace(",","")) ' 输出结果:12345.3456
s1=$"$3.3{12345.3456}"$
Log(s1.Replace(",","")) ' 输出结果:12345.346
s1=$"$7.2{12345.3456}"$
Log(s1.Replace(",","")) ' 输出结果:0012345.35
数字格式化程序还常用于限定时间输出格式:
Dim h = 2, m = 15, s = 7 As Int
Log($"剩余时间 $2{h}:$2{m}:$2{s}"$) '输出结果:剩余时间 02:15:07
如果数字表达式不能返回数字,则输出NaN:
Log($"$1.2{"该值不是数字!"}"$) ' 输出结果:NaN
三、其他格式化程序
1、Date
相当于 DateTime.Date。
Log($"当前日期为 $date{DateTime.Now}"$)
输出结果:当前日期为 12/13/2024
2、Time
相当于 DateTime.Time。
Log($"当前时间为 $time{DateTime.Now}"$)
输出结果:当前时间为 18:55:16
3、DateTime
相当于 DateTime.Date & " " & DateTime.Time。
Log($"当前时间为 $DateTime{DateTime.Now}"$)
输出结果:当前时间为 12/13/2024 18:57:35
4、XML
转义五个 XML 实体 (", ', <, >, &):
Dim UserString As String = $"它会破坏您的解析器 ><'"&?"$
Log(UserString)
输出结果:它会破坏您的解析器 ><'"&?
Log($"用户输入是: $xml{UserString}"$)
输出结果:用户输入是:它会破坏您的解析器 ><'"&?
这对于 html 内容也很有用。