返回介绍

11. GString(插值、多行)

发布于 2025-01-04 00:44:56 字数 2021 浏览 0 评论 0 收藏 0

在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文