Groovy数据类型

操作符重载:可以在自己的类上随意地使用操作符,只需要实现相应的方法就可以了。因为操作符的重载在程序的简洁性、可阅读性上有很大帮助,这里列举可重载的操作符:

a + b:plus

a - b:minus

a * b:multiply

a / b:div

a % b:mod

a++/++a:next

a--/--a:previous

a**b:power

a | b:or

a & b:and

a ^ b:xor

-a:negate

a[b]:getAt

a[b] = c:putAt

a << b:leftShift

a >> b:rightShift

a >>> b:rightShiftUnsigned

switch(a){case b: TODO}:isCase

a == b:equals

a <=> b:compareTo

a as type:asType


Groovy有两种字符串:java.lang.String和groovy.lang.GString,在GString可以通过$引用到一个变量,下面看Groovy中字符串的用法:

a = 'like this $c'; // java.lang.String
b = "like this $a"; // 如果包含$则为groovy.lang.GString,否则为java.lang.String,此时b = 'like this like this $c'
c = '''
like this$c
''' // 多行字符串,但是仍然为java.lang.String,各行间'\n'
d = """
like this$c
""" // 多行字符串,如果包含$则为groovy.lang.GString,否则为java.lang.String,各行间'\n'
e = /\d/ // 字符串内容不转义'\',在正则处理的时候使用阅读性会提高很多

作为GDK吸引人的特性,groovy在字符串中包含许多有用的to*方法,比如toInteger、toFloat等。在进行字符串拼接操作时用到的是StringBuffer:

print "hello " << "world";

在groovy中可以使用正则实现如下功能:

1、是否完全匹配整个字符串。

2、字符串中的是否存在匹配上的串。

3、匹配成功的数目。

4、根据每个成功匹配的结果做一些工作。

5、替换成功匹配的结果。

6、使用匹配结果作为分割符号,将字符串分割成多个子字符串。

下面是一些正则用法的代码:

// ~用在字符串之前,会将字符串编译成Pattern
def shoutedWord = ~/\b[A-Z]+\b/;

// =~将操作符左边的字符串跟右边的Pattern进行局部匹配,返回值为Matcher
def matcher1 = ("finda" =~ /find/)
assert "find" == matcher1[0]

// matcher可能为空,那么上面的代码就会报错,最好用matcher.matches进行判断
def matcher = "foobazaarquux" =~ "o(b.*r)q"
def lst = []
if (matcher.matches()) {
    list = matcher[0]
}
assert ["obazaarq", "bazaar"] == lst   //FALSE

// ==~用法跟=~类似,只是这里进行的精确匹配,即左边的整个字符串跟左边的模式进行匹配,返回的结果是Boolean
def matcher2 = ("finda" ==~ /find/)
assert java.lang.Boolean == matcher2.getClass()

// 将满足正则表达式的第一个字符串进行替换
assert "Green Eggs and Spam" == "Spam Spam".replaceFirst(/Spam/, "Green Eggs and")

// 将所有满足正则表达式的字符串进行替换
assert "The armor was colored silver" == "The armour was coloured silver".replaceAll(/ou/, "o")

// replaceAll的第二个参数可以使用闭包
def dashedToCamelCase(orig) {
    orig.replaceAll(/-(\w)/) { fullMatch, firstCharacter -> firstCharacter.toUpperCase() }
}

assert "firstName" == dashedToCamelCase("first-name")

// 可以用正则对集合进行改造
assert ["foobar", "bazbar"] == ["foobar", "bazbar", "barquux"].grep(~/.*bar$/)
assert ["foobar", "bazbar"] == ["foobar", "bazbar", "barquux"].findAll { it ==~ /.*bar$/ }

























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值