Groovy探索之Gstring

原创 2008年04月09日 20:05:00
                                      Groovy探索之Gstring
 
Groovy语言里有很多看起来不起眼的小玩意,但使用以后,我们却常常会惊异于它的巨大能量,Gstring就是其中之一。
Java的String对象是我们最最常用的对象,却也是诟病最多的对象。一句话来说,String使用起来非常不方便。而Gstring不但使用方便,而且更是Groovy语言动态性的基础。
所谓Gstring,是指通过双引号引起来的、带有占位表达式的字符串,如:def str = “${name}’s dog is ${dog.name}”,其中由美元符号括起来的部分就是占位表达式,而str就是一个Gstring对象。
这里试着列出其中的一些常用方法。
1.       字符串叠加
Java String类型的字符串叠加是通过String对象相加运算完成的,其形式如下:
def result = name+” is ”+age+” years old”;
这种形式的字符串相加使得我们在编码的时候非常不方便,而Gstring则不同了,它可以使我们非常方便的编码,形式如下:
def result = “$name is $age years old”;
 
2.       方便字符串与函数的运算
在编码的过程中,我们经常会将表达式结果和字符串一起运算,Gstring可以使我们在这样的计算方面更加方便和轻巧。请看下面的例子:
def result = “key: person.name value: ${map[‘person.name’]}”
def result = “${book?.author?.name}”
等等
 
3.       Gstring的动态性
Groovy语言编程有着良好的动态性,可以使得我们写出十分优雅的底层抽象代码。而Gstring则是这种动态性编程的基础。
在反射方面,使用Gstring可以十分方便的对一个类的属性和方法进行访问。如下:
假设我们有一个Person类
class Person
{
        String name
}
下面我们通过Gstring对象就可以对Person的对象的属性进行操作了。
String propName = ‘name’;
Person p = new Person()
p.”${ propName }” = ‘tom’
 
println p.”${propName}”
 
同样,通过Gstring对象,我们也可以十分方便对对象的方法进行操作,如下:
我们假设上面的Person类有一个toString()方法。
public String toString()
{
        return name
}
那么,我们就可以对该方法进行如下的操作。
String functionName = “toString”
Person p = new Person()
p.name = “mike”
 
println p.”${functionName}”()
 
在正则表达式方面,我们也可以使用Gstring对象对正则表达式进行运行时的替换,这也是Gstring所做的一个有意思的工作,如下:
def reference = “pattern”
 
println reference == /${reference}/
 
如果Gstring对象所引用的是一个对象,那么需要注意的是该Gstring对象的值等于运行时它所引用的对象的值;换句话说,该Gstring对象的值是可能变化的。具体说来就是随着它引用的那个对象变化而变化。下面给出一个例子。
还是Person类为例:
class Person
{
        String name
 
        public String toString()
{
               return name
}
 
}
很简单的一个类,下面我们对该类进行操作:
Person p = new Person()
p.name = ‘tom’
 
def str = “${p}”
 
println str
 
p.name = ‘mike’
 
println str
运行上面的代码,我们可以看到,打印的第一行为:tom,而第二行却是:mike。就是因为str这个Gstring对象引用的是p这个Person对象,而这个对象是可能随时变化的。
 
4.       Gstring在Gsql中的问题
Gstring使用非常方便,我们在使用Groovy语言的时候,肯定会自觉不自觉的大量使用它。需要注意的是,虽然它很方便,但是在使用的过程中仍然会遇到问题。下面一个例子是我在对Oracle Blob字段进行操作时候遇到了,当时就郁闷了一段时间。
def selectSql = "select other from tran where id = '5'"
def updateStr = "${selectSql} for update"
          
def row = sql.firstRow(updateStr)
 
运行上面的代码时,结果就报错了。解决的方法有两个:
一是不使用Gstring,def updateStr = selectSql+' for update'
二是将updateStr对象声明为StringString updateStr = "${selectSql} for update"
后来在Groovy的官方网站上查到了这个问题,但上面仍然说明为什么GstringGsql中会出问题。
 

Glib学习(5) 字符串 Strings

先上说明文档网址:http://web.mit.edu/barnowl/share/gtk-doc/html/glib/glib-Strings.html 学过面向对象语言的同学一定都知道Stri...
  • andylauren
  • andylauren
  • 2016年05月14日 16:45
  • 1574

GString

groovy中字符串的处理   在groovy中字符串分两种1,原java普通字符串,单引号。2,GString,双引号 允许占位符 $。   三组引号允许字符串在多行中,不用连接   '...
  • suncaishen
  • suncaishen
  • 2011年02月19日 14:04
  • 3500

Groovy字符串及其常用方法

文本文字以字符链的形式表示被称作字符串。脚本语言在字符串处理方面比主流的应用程序开发语言做的更好。Groovy就提供了许多附加的特性。在Groovy中有两种风格的字符串:String(java.lan...
  • dora_310
  • dora_310
  • 2016年10月22日 23:27
  • 12800

Groovy常用语法总结

过去半年都在写Groovy,基本都是在实战中学习,从java转过来,也还没什么问题,毕竟基础,架构都没变。 Groovy的强大特性中,Closure,MetaClass都尝试过,Closure基本上...
  • yanical
  • yanical
  • 2011年12月29日 21:00
  • 19748

Groovy Tip 10 Groovy语言对String的简化操作

           Groovy Tip 10 Groovy语言对String的简化操作 在Groovy语言中,对String对象的操作就像操作List对象一样的方便。比如我们在Java语言中,对S...
  • hivon
  • hivon
  • 2008年05月05日 07:48
  • 9590

Glib学习(5) 字符串 Strings

先上说明文档网址:http://web.mit.edu/barnowl/share/gtk-doc/html/glib/glib-Strings.html 学过面向对象语言的同学一定都知道Stri...
  • andylauren
  • andylauren
  • 2016年05月14日 16:45
  • 1574

GLib介绍与使用

GLib介绍与使用 分类: C/C++ 2012-07-26 00:43 461人阅读 评论(0) 收藏 举报 listtimerstringcallback存储user GLib是一种底层...
  • Luohsh1
  • Luohsh1
  • 2013年03月04日 11:24
  • 543

Groovy字符串及其常用方法

文本文字以字符链的形式表示被称作字符串。脚本语言在字符串处理方面比主流的应用程序开发语言做的更好。Groovy就提供了许多附加的特性。在Groovy中有两种风格的字符串:String(java.lan...
  • dora_310
  • dora_310
  • 2016年10月22日 23:27
  • 12800

android string.xml中使用占位符

不得不佩服android studio强大,以前写代码只关注了是否拼写出错,现在根据studio的提示去操作,发现string.xml还可以写占位符!!!这下可以方便我对所有带参的文字的统一管理了。 ...
  • u011544271
  • u011544271
  • 2016年07月08日 22:31
  • 6353

简单的string占位符替换

实现java提示信息模板功能 其实这个主要是看了struts的实现才知道的(虽然最后的代码就几行)。   今天同事又问起类似的字符换占位符替换的功能,我就找了这个帖子,目的是达到了。不过...
  • fengbonianshao
  • fengbonianshao
  • 2013年12月19日 16:32
  • 2229
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Groovy探索之Gstring
举报原因:
原因补充:

(最多只允许输入30个字)