Groovy Tip 34 Groovy语言的here-docs
Groovy语言对Java字符串的改变,除了String对象的很多新功能,最大的好处就是引入了Gstring的概念,这些都在前面的文字中有过详细的阐述。除此之外,Groovy语言还引入了here-docs的概念,这就是本篇将要谈到的。
简单来说,here-docs就是用来解决字符串换行的问题。
在Java语言中,字符串换行有两种解决方法。
一种是通过"+"号连接,这种本身对字符串没有换行,因为字符串本身太长,通过换行来方便我们的阅读。这种场合最常用的是sql语句。如下:
private static final String sql = "select t.qdbid as itemdbid, "+
"t.itemtype as itemlev, "+
"t.itemname as itemname, "+
"t.sourceid as parentid "+
"from t_sp_qcddvbase t "+
"where t.yearmonth=? and "+
"t.isview LIKE '%Y%' "+
"order by t.itemtype, t.qdbid";
我们可能都写过了类似于上面的sql语句,在上面的语句中,为了方便我们的阅读,我们不得不为了一句sql语句,输入多个"+"号,还有多对引号。这大大的降低了我们的编码效率。同时,由于每一行的字符串都需要引号和"+"号连接,所以阅读性也并不是太好。
在Groovy语言中,我们引入了here-docs的概念,所谓"here-docs",在Groovy语言中,就是由三对双引号引起来的,可以换行的字符串。例如,使用"here-docs",我们就可以把上面的sql语句写成下面的样子:
private static final String sql = """select t.qdbid as itemdbid,
t.itemtype as itemlev,
t.itemname as itemname,
t.sourceid as parentid
from t_sp_qcddvbase t
where t.yearmonth=? and
t.isview LIKE '%Y%'
order by t.itemtype, t.qdbid""";
可以看到,使用"here-docs"的阅读性就比上面的Java语言的方式要强得多。而且编码也方便了很多。
同时,"here-docs"中的换行也是字符串中的真正换行。曾经,我们在Java语言中要用到字符串的换行,就必须借助于"\n"字符串。比如,一个网上书店的通知单的编码可能是如下的样子:
String name = "Wallace";
String sex = "male";
String[] books = new String[]{"Groovy in action","Grails in action"};
String time = "2009-05-20";
StringBuffer sb = new StringBuffer();
sb.append("Dear ");
if("male".equalsIgnoreCase(sex))
{
sb.append("Mr.");
}
else if("female".equalsIgnoreCase(sex))
{
sb.append("Ms.");
}
sb.append(name).append(",\n ");
sb.append("You has bought ");
sb.append(books.length).append(" books: ");
for(int i=0;i<books.length;i++)
{
sb.append(books[i]).append(",");
}
sb.append(" You will receive it at ").append(time);
sb.append("\n");
sb.append(" Thank You!");
System.out.println(sb.toString());
运行结果为:
Dear Mr.Wallace,
You has bought 2 books: Groovy in action,Grails in action, You will receive it at 2009-05-20
Thank You!
可以看到,编码十分的繁琐,代码的阅读性也很差。如果使用"here-docs"的话,编码将会是如下的样子:
String name = "Wallace"
String sex = "male"
String[] books = ["Groovy in action","Grails in action"]
String time = "2009-05-20"
def mrms = sex=='male'?'Mr':'Ms'
def bookNames = books.join(',')
def letter =
"""Dear ${mrms}.${name},
You has bought ${books.size()} books: ${bookNames}, You will receive it at $time
Thank You!"""
println letter
运行结果为:
Dear Mr.Wallace,
You has bought 2 books: Groovy in action,Grails in action, You will receive it at 2009-05-20
Thank You!
可以看到,由于"here-docs"也支持Gstring,所以使用"here-docs"对多行字符串进行编码,无论是代码量上,还是可读性上,都强了很多。
最后,值得注意的是,由于"here-docs"也是字符串,同样可以进行字符串的各种操作,请看如下的一个生成html标签的代码:
def list = ['Groovy in action','Grails in action']
def name = 'select1'
def select =
"""<select name="${name}">
"""
StringBuffer sb = new StringBuffer()
list.each{
sb <<" <option>${it}</option>\n"
}
select = select+sb.toString()
select = select+
"""
</select>"""
println select
里面既有"here-doc",又有双引号的字符串加上Gstring,然后再把它们连接起来,整个编码显得十分的灵活。
运行结果为:
<select name="select1">
<option>Groovy in action</option>
<option>Grails in action</option>
</select>
分享到:
相关推荐
在文档方面,"groovy-2.5.0-beta-2"目录下很可能包含以下内容: 1. **API文档**:这部分详细列出了Groovy库的所有类、接口、方法和构造函数,是开发过程中不可或缺的参考。它以HTML形式呈现,便于搜索和浏览。 2. ...
groovy-grails-tool-suite-3.6.4.RELEASE-e4.4.2-win32-x86_64.part1 共两个压缩包,解压后将扩展名.zip.bak改为.zip再次解压。
apache-groovy-docs-2.4.6.chm CHM文档
赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...
标题“groovy-all”暗示这是一个包含Groovy完整实现的库,通常这样的库会包括Groovy的运行时环境和所有相关的类库。版本号“2.4.7”表明这是Groovy 2.4系列的一个稳定版本,发布于2016年,该版本可能包含了自2.4.0...
赠送jar包:groovy-all-2.4.5.jar; 赠送原API文档:groovy-all-2.4.5-javadoc.jar; 赠送源代码:groovy-all-2.4.5-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.5.pom; 包含翻译后的API文档:groovy-all...
在SDK中,"groovy-2.5.0-beta-2"目录下通常会包含以下关键组件: 1. **bin** 目录:包含可执行脚本,如`groovy`, `groovyc`, `groovysh`等,这些是Groovy的命令行工具,用于运行Groovy脚本、编译Groovy源码和启动...
赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...
1. **groovy-all.jar**:这是一个包含了Groovy库所有模块的集合,你可以通过引入这个单一的jar文件来快速地在项目中使用Groovy。 2. **bin**目录:包含了一系列可执行脚本,如`groovy`, `groovyc`, 和 `groovysh`,...
apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...
"groovy-xml-2.2.0-beta-1.zip" 文件是Groovy的一个版本,专注于XML处理功能,特别适用于在Groovy中解析、操作和生成XML文档。这个版本为2.2.0的beta-1,意味着它是该版本系列中的早期测试版,开发者可能在其中寻找...
groovy-2.0.8-with-eclipse-plugin-2.7.2.part3
标题 "org.codehaus.groovy-2.9.0.xx-201407142235-e44-RELEASE-updatesite.zip" 暗示了这是一个与Groovy编程语言相关的Eclipse插件的更新站点压缩包。这个版本号 "2.9.0" 表明这是该插件的2.9.0版,时间戳 ...
6. **jar文件**:如`groovy-4.0.3.jar`等,这些是SDK的核心库,包含Groovy运行时所需的类和接口。 7. **依赖库**:Groovy可能依赖于其他Java库,如Ant、JUnit等,这些依赖项通常也会包含在SDK中。 使用Groovy SDK...
赠送jar包:groovy-all-2.4.13.jar; 赠送原API文档:groovy-all-2.4.13-javadoc.jar; 赠送源代码:groovy-all-2.4.13-sources.jar; 赠送Maven依赖信息文件:groovy-all-2.4.13.pom; 包含翻译后的API文档:groovy...
groovy-grails-tool-suite-3.6.4.RELEASE-e4.4.2-win32-x86_64.part2 共两个包,解压后需要将扩展名.zip.bak改名为.zip重新解压。 http://dist.springsource.com/release/STS/3.8.1.RELEASE/dist/ e4.6/spring-tool-...
赠送jar包:groovy-2.5.1.jar; 赠送原API文档:groovy-2.5.1-javadoc.jar; 赠送源代码:groovy-2.5.1-sources.jar; 赠送Maven依赖信息文件:groovy-2.5.1.pom; 包含翻译后的API文档:groovy-2.5.1-javadoc-API...
"groovy-docs-1.8.6.zip"是一个压缩包,包含了Groovy 1.8.6版本的完整文档,用于指导用户和开发者了解这个特定版本的功能和API。 在Groovy 1.8.6中,有以下几个关键知识点: 1. **动态类型**:Groovy允许开发者...
在"groovy-docs-1.8.9.zip"这个压缩包中,我们可以期待找到Groovy 1.8.9的完整文档集合。文档通常包括API参考、用户指南、教程以及开发者信息,这些都是理解和学习Groovy的关键资源。以下是一些关于Groovy 1.8.9的...
org.gradle.api.resources.ResourceException: Could not get resource '...下载groovy-all-2.4.15.jar后,放入对应的 android-studio/gradle/gradle-5.*/lib/目录。 重启 Android Studio 及可使用。