原创 Groovy Tip 10 Groovy语言对String的简化操作收藏

新一篇: Groovy探索之Builder 二 | 旧一篇: Groovy探索之Builder 一

           Groovy Tip 10 Groovy语言对String的简化操作
 
在Groovy语言中,对String对象的操作就像操作List对象一样的方便。比如我们在Java语言中,对String对象的操作用得比较多的是substring方法。如下:
       String str = "abcdefg";
      
    System.out.println(str.substring(1,3));
 
结果为:
bc
 
这里有两点不便:一是substring方法和参数的繁琐;二是它的最后一个参数,比如substring(1,3)得到的结果不是str对象的第一位到第三位,而是第二位。这和我们的直觉不符,常常导致我们出错。
而在Groovy语言里,上面的代码被改造为下面的样子:
     def str = 'abcdefg'
     
 println str[1..2]
 
结果为:
bc
 
看到了吧,像数组一样操作String对象,str[1..2]得到的就是第一位到第二位的值,符合我们的习惯。
当然,你还可以取String对象中的任意字符:
     def str = 'abcdefg'
     
 println str[1,3,5]
 
结果是:
bdf
 
很棒吧!
既然操作String对象就像操作List对象一样,那么List类的一些方法如eachString对象就可以直接拿来使用了。
     def str = 'abcdefg'
     
     str.each{
        print it
        print','
 }
 
结果为:
a,b,c,d,e,f,g,
 
     def str = 'abcdefg'
     
 println str.contains('d')
 
结果为:
true
 
等等。其他方法,如“find”、“findAll”、“every”、“any”等方法都可以在String对象中使用。
如果你不喜欢str对象后面的“fg”两个字符,想把他们从str对象中删掉,在Java语言中,你必须这样做:
       String str = "abcdefg";
      
       str = str.substring(0,5);
      
    System.out.println(str);
 
而在Groovy语言中,你可以这样做:
     def str = 'abcdefg'
     
     str = str-'fg'
     
 println str
 
当然,你也可以把str对象中的“ab”减去:
     def str = 'abcdefg'
     
     str = str-'ab'
     
 println str
 
结果为:
cdefg
 
如果在str对象中减去“st”呢:
     def str = 'abcdefg'
     
     str = str-'st'
     
 println str
 
结果为:
abcdefg
 
如果在str对象中减去“be”呢:
     def str = 'abcdefg'
     
     str = str-'be'
     
 println str
 
结果为:
abcdefg

发表于 @ 2008年05月05日 07:48:00|评论(loading...)|编辑

新一篇: Groovy探索之Builder 二 | 旧一篇: Groovy探索之Builder 一

评论

#vironica 发表于2008-05-05 12:50:49  IP: 59.40.154.*
这个。。有任何意义么,不是看语法就能看完的,还要看他们后台怎么实现的,两者相比哪个高效,还有代码是否具有可读性。。

GROOOOOOOOOOOY 这种类似于脚本的语言看上去好像简单了很多,代码多了就不具备任何可读性了。特别想那个 string a - string b,绝对没有 string a = a.replaceAll(b,""); 来的直观。

总之简化不代表高效,不代表健壮,像 "acdbfeg" - "be",这个一般人减的时候绝对不希望将 不连续的b , e减去的。。
#kenlistian 发表于2008-05-05 17:13:26  IP: 59.39.129.*
咋跟ruby差不多的语法?
#hivon 发表于2008-05-05 20:34:48  IP: 61.57.242.*
To vironica,

Groovy等动态语言带来了编码的快捷性,至于你说的高效,我没有比较过,也没有这方面的数据。所以不敢说。
关于可读性的问题,我不认为Java的a = a.replaceAll(b,""); 比a-b的可读性好。
还有"acdbfeg" - "be"并没有你说的意思。

To kenlistian:
跟Ruby差不多就对了,虽然我没学过Ruby,但感觉它们应该差不多。就像C#和Java一样。
#peng3409 发表于2008-05-06 12:42:23  IP: 202.96.60.*
groovy的效率的确是个问题
#hivon 发表于2008-05-06 14:42:58  IP: 61.57.242.*
To peng3409:

有关Groovy语言效率的问题,我曾经看到的数据时说,Groovy语言的速度相当于Java语言的80%。由于Groovy语言并不是通常动态语言需要解释,而是直接生成JVM能跑的字节码,所以速度应该跟Java比没什么问题。现在Groovy语言比Java慢主要是因为多过使用Java反射的原因。以后Groovy语言会在这上面做进一步的优化。
基于上面的原因,很多人都认为Groovy的速度比Ruby快,而Grails在速度上更没有太大的问题。
#mcsessx 发表于2008-05-07 10:50:43  IP: 61.183.221.*
groovy不可能相当于java的80%,
就是比较快的jython, rhino都没有到,
groovy还是java脚本语言中比较慢的,

groovy所谓编译就是编译成了一大堆根据反射来调用的代码,这与rhino这些的编译有本质不同
#hivon 发表于2008-05-07 12:05:43  IP: 61.57.242.*
Groovy语言大量使用反射的问题已经在优化中,80%是我从他人文章中得到的数据,不知道是否确切。
#hivon 发表于2008-05-14 08:16:34  IP: 61.57.242.*
To,everyone:

不好意思,这是我第一次删掉大家的回复。上一次有人使用了有攻击性的语言,由于我的大意没有处理。在此向大家道歉。
这次,我删掉了一些攻击性的言论,希望大家能原谅。同时也希望我们摆事实,讲道理。不要搞人身攻击。
谢谢大家的回复!
#liefsoft 发表于2008-05-31 18:50:32  IP: 10.1.154.*
groovy确实不错,至于速度问题我觉得随着新版本的不断发布,会让大家满意的。
#liefsoft 发表于2008-05-31 18:54:32  IP: 10.1.154.*
实际上速度问题不是最重要的,到现在还有人说java慢呢,但并不影响它在企业级应用的地位。汇编语言到是快,你愿意用吗?
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © hivon