`
ihuashao
  • 浏览: 4720719 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Groovy Tip 34 Groovy语言的here-docs

阅读更多

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>

分享到:
评论

相关推荐

    apache-groovy-docs-2.5.0-beta-2.zip

    在文档方面,"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

    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文档

    apache-groovy-docs-2.4.6.chm CHM文档

    groovy-3.0.9-API文档-中文版.zip

    赠送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-all”暗示这是一个包含Groovy完整实现的库,通常这样的库会包括Groovy的运行时环境和所有相关的类库。版本号“2.4.7”表明这是Groovy 2.4系列的一个稳定版本,发布于2016年,该版本可能包含了自2.4.0...

    groovy-all-2.4.5-API文档-中文版.zip

    赠送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...

    apache-groovy-sdk-2.5.0-beta-2.zip

    在SDK中,"groovy-2.5.0-beta-2"目录下通常会包含以下关键组件: 1. **bin** 目录:包含可执行脚本,如`groovy`, `groovyc`, `groovysh`等,这些是Groovy的命令行工具,用于运行Groovy脚本、编译Groovy源码和启动...

    groovy-3.0.9-API文档-中英对照版.zip

    赠送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...

    apache-groovy-sdk-4.0.1下载

    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版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...

    groovy-xml-2.2.0-beta-1.zip

    "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

    groovy-2.0.8-with-eclipse-plugin-2.7.2.part3

    org.codehaus.groovy-2.9.0.xx-201407142235-e44-RELEASE-updatesite.zip

    标题 "org.codehaus.groovy-2.9.0.xx-201407142235-e44-RELEASE-updatesite.zip" 暗示了这是一个与Groovy编程语言相关的Eclipse插件的更新站点压缩包。这个版本号 "2.9.0" 表明这是该插件的2.9.0版,时间戳 ...

    groovy-sdk-4.0.3

    6. **jar文件**:如`groovy-4.0.3.jar`等,这些是SDK的核心库,包含Groovy运行时所需的类和接口。 7. **依赖库**:Groovy可能依赖于其他Java库,如Ant、JUnit等,这些依赖项通常也会包含在SDK中。 使用Groovy SDK...

    groovy-all-2.4.13-API文档-中文版.zip

    赠送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

    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-...

    groovy-2.5.1-API文档-中英对照版.zip

    赠送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-docs-1.8.6.zip"是一个压缩包,包含了Groovy 1.8.6版本的完整文档,用于指导用户和开发者了解这个特定版本的功能和API。 在Groovy 1.8.6中,有以下几个关键知识点: 1. **动态类型**:Groovy允许开发者...

    groovy-docs-1.8.9.zip

    在"groovy-docs-1.8.9.zip"这个压缩包中,我们可以期待找到Groovy 1.8.9的完整文档集合。文档通常包括API参考、用户指南、教程以及开发者信息,这些都是理解和学习Groovy的关键资源。以下是一些关于Groovy 1.8.9的...

    groovy-all-2.4.15.jar

    org.gradle.api.resources.ResourceException: Could not get resource '...下载groovy-all-2.4.15.jar后,放入对应的 android-studio/gradle/gradle-5.*/lib/目录。 重启 Android Studio 及可使用。

Global site tag (gtag.js) - Google Analytics