文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
11. GString(插值、多行)
在 Java 中,我们常常联合使用字符串与变量,通常会带有很多开闭的双引号、加号,以及用于换行的 \n
字符。利用插入字符串(也叫 GString),以前的字符串看起来就会优雅多了,输入起来也变得简洁了:
throw new Exception("Unable to convert resource: " + resource)
跟下面的方式对比一下:
throw new Exception("Unable to convert resource: ${resource}")
在大括号内,可以放入各种表达式,而不只是变量。对于较简单的变量,或者 variable.property
,甚至还可以去掉大括号。
throw new Exception("Unable to convert resource: $resource")
甚至还可以使用 ${→ resource }
和闭包形式来拖延计算那些表达式。当 GString 被迫转换为字符串时,就会计算闭包,获得返回值的 toString()
表示形式。
范例:
int i = 3
def s1 = "i's value is: ${i}"
def s2 = "i's value is: ${-> i}"
i++
assert s1 == "i's value is: 3" // 急切地计算,一创建时就求值
assert s2 == "i's value is: 4" // 拖延式计算,考虑新值
当字符串与它们的联合表达式用 Java 表示显得很长时,比如像下面这个:
throw new PluginException("Failed to execute command list-applications:" +
" The group with name " +
parameterMap.groupname[0] +
" is not compatible group of type " +
SERVER_TYPE_NAME)
你可以使用 \
行连续字符(这并不是一个多行字符串):
throw new PluginException("Failed to execute command list-applications: \
The group with name ${parameterMap.groupname[0]} \
is not compatible group of type ${SERVER_TYPE_NAME}")
或者利用三个引号的多行字符串来表示:
throw new PluginException("""Failed to execute command list-applications:
The group with name ${parameterMap.groupname[0]}
is not compatible group of type ${SERVER_TYPE_NAME)}""")
另外,还可以在多行字符串调用 .stripIndent()
去除字符串左边的缩进。
注意,在 Groovy 中,单引号与双引号的区别在于:单引号常用于创建没有插入变量的 Java 字符串,而双引号则既能创建 Java 字符串,也能在出现插值变量时创建 GString。
对于多行字符串,可以使用三重引号,比如对 GString 用三重双引号,对单纯的字符串用三重单引号。
如果需要编写正则表达式模式,应该使用“斜杠式”字符串标记法:
assert "foooo/baaaaar" ==~ /fo+\/ba+r/
这样写的好处在于不必使用双重转义反斜杠,从而更便于使用 regex。
最后要强调的是,在需要字符串常量时,尽量优先使用单引号字符串,而在显然需要字符串插值时,才使用双引号字符串。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论